Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Crear Vista de forma dinamica (https://www.clubdelphi.com/foros/showthread.php?t=53190)

felixhb 13-02-2008 17:03:04

Crear Vista de forma dinamica
 
Hola.

Necesito crear una vista de una tabla, de forma dinamica (la tabla de la que voy a crear la vista no es siempre la misma). En función de este nombre asigno tambien el nombre a la vista.

He conseguido crear la vista de la siguiente forma:

ALTER PROCEDURE [dbo].[VISTACrear]
@INTABLA VARCHAR(30)

AS
BEGIN
DECLARE @VISTA VARCHAR(31)

SET @VISTA = 'V' + @INTABLA

EXEC ('CREATE VIEW ' + @VISTA +
' AS SELECT REGIS01, REGIS02, REGIS03, REGIS04, REGIS05, REGIS06, REGIS07, REGIS08, REGIS09, REGIS10, REGIS12, REGIS11, REGIS13, REGIS14, REGIS15, REGIS18, REGIS19, REGIS20
FROM ' + @INTABLA)

END


El problema viene cuando quiero introducir las condiciones del "SELECT" para crear la vista.


ALTER PROCEDURE [dbo].[VISTACrear]
@INTABLA VARCHAR(30),
@INARTI VARCHAR(13),
@INSITU VARCHAR(15),
@INICIO DATETIME,
@FIN DATETIME,
@INPROVEDO VARCHAR(5),
@COMBO VARCHAR(1),
@RADIO VARCHAR(1),
@INPROBLE BIT,
@OUTVISTA VARCHAR(31) OUTPUT,
@OUTERROR INT OUTPUT

AS
BEGIN
DECLARE @VISTA VARCHAR(31)
BEGIN TRAN

SET @VISTA = 'V' + @INTABLA

EXEC ('CREATE VIEW ' + @VISTA +
' AS SELECT REGIS01, REGIS02, REGIS03, REGIS04, REGIS05, REGIS06, REGIS07, REGIS08, REGIS09, REGIS10, REGIS12, REGIS11, REGIS13, REGIS14, REGIS15, REGIS18, REGIS19, REGIS20
FROM ' + @INTABLA + ' WHERE REGIS03='+@INARTI+' AND REGIS06='+@INSITU+ ' AND REGIS09 BETWEEN '+@INICIO+' AND '+@FIN+ ' AND REGIS25=TRUE AND REGIS15='+@INPROVEDO+' ORDER BY REGIS01')

No me toma las variables a partir de la variable "@INARTI" .
El valor que le paso a @INARTI='A.20100' y solo me toma la 'A'. Tengo que mencionar que tambien he probado utilizando 'CAST' para forzar la conversión aunque fuera un varchar. Con las variables @INICIO y @FIN me pasa lo mismo por ser de tipo DATETIME (tambien he probado con el CAST).

Otra forma que tambien he probado es haciendolo de una forma mas segura utilizando:


SELECT sSQL = 'SELECT * FROM '
SELECT @sSQL = @SQL + @NombreTabla
--Y ejecutar ese texto contenido en nuestra variable
EXEC ( @sSQL)


y su forma mas segura:


DECLARE @sSQL nvarchar(1000)
--la variabla que contiene la cadena a ejecutar debe ser unicode, por eso lo de nvarchar
SET @sSQL = 'SELECT * FROM Products WHERE ProductName = @NombreProducto'
EXEC sp_executesql @sSQL,
N'@NombreProducto nvarchar(50)', @NombreProducto =@parametroPasadoAProcedimiento

pero tampoco me deja.

Ya no se que mas formas probar.

Alguien sabe otra forma o que estoy haciendo mal????

Gracias de todos modos.


La franja horaria es GMT +2. Ahora son las 09:59:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi