SQL Server - porque es incorrecto esto??????

   
Vista:

porque es incorrecto esto??????

Publicado por joan (1 intervención) el 09/05/2008 14:07:03
hola a todos , necesito de vuestra ayuda, quiero crear una funcion que comprueba si existe un valor en un campo de una tabla , todos: valor, campo y tabla son variables, he hecho esto y no funciona.

CREATE FUNCTION existe (@NOMBRE_CAMPO VARCHAR(50), @CODIGO VARCHAR(50), @TABLA VARCHAR (60))
RETURNS BIT
AS

BEGIN

DECLARE @EXISTE BIT

DECLARE @NNOMBRE_CAMPO VARCHAR(50)
DECLARE @NCODIGO VARCHAR(50)
DECLARE @NTABLA VARCHAR(60)
DECLARE @STRSQL VARCHAR(150)

SET @NTABLA = @TABLA
SET @NNOMBRE_CAMPO =@NOMBRE_CAMPO
SET @NCODIGO =@CODIGO
SET @STRSQL = 'SELECT ' + @NNOMBRE_CAMPO + ' FROM ' + @NTABLA + ' WHERE ' + @NNOMBRE_CAMPO + ' = ' + CHAR(39)+ @NCODIGO+ CHAR(39)

IF EXISTS( SELECT @NNOMBRE_CAMPO FROM NTABLA WHERE @NNOMBRE_CAMPO = CHAR(39)+ @NCODIGO+ CHAR(39) )

SET @EXISTE= 1
ELSE
SET @EXISTE= 0

RETURN @EXISTE

END

Al validarlo me da el error

Debe declarar la variable '@NTABLA'.
Sintaxis incorrecta cerca de la palabra clave 'ELSE'.

La variable está declarada, cual es el problema
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:porque es incorrecto esto??????

Publicado por daniel (16 intervenciones) el 09/05/2008 17:21:50
Creo que el problema es la sintaxis

IF EXISTS( SELECT @NNOMBRE_CAMPO FROM NTABLA WHERE @NNOMBRE_CAMPO = CHAR(39)+ @NCODIGO+ CHAR(39) )

FROM @NTABLA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:porque es incorrecto esto??????

Publicado por Isaias (3308 intervenciones) el 09/05/2008 19:37:33
La referencia hacia los nombre de los objetos, NO PUEDE hacerse mediante variables, a menos de que utilice query dinamico con sus pros-y-contras

-- Esto le enviara un Error
DECLARE @TABLA SYSNAME
SET @TABLA = 'CLIENTE'
SELECT * FROM @TABLA

-- Esto funciona
DECLARE @TABLA SYSNAME
DECLARE @SQLString NVARCHAR(100)
SET @TABLA = 'CLIENTE'
SET @SQLString = N'SELECT * FROM '+@TABLA
EXEC SP_EXECUTESQL @SQLString
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar