Ver Mensaje Individual
  #1  
Antiguo 13-02-2008
felixhb felixhb is offline
Registrado
 
Registrado: feb 2008
Posts: 1
Reputación: 0
felixhb Va por buen camino
Exclamation 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.
Responder Con Cita