stored procedures con parametro uniqueidentifier

22/11/2006 - 15:31 por rafa | Informe spam
Hola Comunidad.

Estoy intentando crear un procedimiento almacenado(server2005) que recibe
determinados paramentros (pero algunos de estos parametros pueden ser nulos).
Lo que estoy intentando es construir la clausula WHERE en el procedimiento
almacenado, una vez construido el where lanzo el select mediasnte EXEC.

El problema esta con los parametros que son uniqueidentifier.

El codigo del procedimiento es el siguiente
ALTER PROCEDURE prueba
(
@pID uniqueidentifier
)
AS
DECLARE @WHERE nvarchar(300)
SET @WHERE='WHERE Respuesta.ID IS NOT NULL '
IF @pID IS NOT NULL
SET @WHERE=@WHERE+'AND cast(Respuesta.ID as nvarchar='+cast(@pID as
nvarchar(36))

Exec('SELECT Respuesta.ID AS ID,Respuesta.Puntuacion AS Puntuacion
FROM Respuesta '+ @WHERE)


Cuando el valor es null no hay problema, pero cuando le asigno un valor
me da el siguiente error:

Mens. 102, Nivel 15, Estado 1, Línea 3
Sintaxis incorrecta cerca de '='.

Si alguien puede aportarme alguna idea.
Gracias.

Preguntas similare

Leer las respuestas

#1 Ele
22/11/2006 - 17:16 | Informe spam
el error es porque no estas cerrando el parentesis del primer cast, en otros
post ya se a discutido que cuando ejecutas un query con la instruccion exec
no hace buen uso de los indices.
porque usas esta instuccion? para ir armando las condiciones segun el
parametro si es nulo?
si es asi pues dentro del if haces un select con la primera condicion y en
el else otro select con la segunda condicion claro con los mismos results
espero te ayude

"rafa" escribió en el mensaje
news:
Hola Comunidad.

Estoy intentando crear un procedimiento almacenado(server2005) que recibe
determinados paramentros (pero algunos de estos parametros pueden ser
nulos).
Lo que estoy intentando es construir la clausula WHERE en el procedimiento
almacenado, una vez construido el where lanzo el select mediasnte EXEC.

El problema esta con los parametros que son uniqueidentifier.

El codigo del procedimiento es el siguiente
ALTER PROCEDURE prueba
(
@pID uniqueidentifier
)
AS
DECLARE @WHERE nvarchar(300)
SET @WHERE='WHERE Respuesta.ID IS NOT NULL '
IF @pID IS NOT NULL
SET @WHERE=@WHERE+'AND cast(Respuesta.ID as nvarchar='+cast(@pID as
nvarchar(36))

Exec('SELECT Respuesta.ID AS ID,Respuesta.Puntuacion AS Puntuacion
FROM Respuesta '+ @WHERE)


Cuando el valor es null no hay problema, pero cuando le asigno un valor
me da el siguiente error:

Mens. 102, Nivel 15, Estado 1, Línea 3
Sintaxis incorrecta cerca de '='.

Si alguien puede aportarme alguna idea.
Gracias.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
22/11/2006 - 18:26 | Informe spam
Rafa,

Si vas a usar sql dinamico (habilidad de crear la sentencia "select"
dinamicamente), entonces es preferible que uses el procedimineto
sp_executesql, pues este permite construir sentencias parametrizables,
dandonos mayor probabilidad de usar algun plan compilado en el cache de
procedimientos.

ALTER PROCEDURE prueba
(
@pID uniqueidentifier
)
AS

set nocount on

declare @sql nvarchar(4000)
declare @lista_param nvarchar(4000)

set @lista_param = N'@pID uniqueidentifier'
set @sql = N'select Respuesta.ID AS ID,Respuesta.Puntuacion AS Puntuacion
FROM dbo.Respuesta where Respuesta.ID IS NOT NULL'

IF @pID IS NOT NULL
SET @sql = @sql + N' AND Respuesta.ID = @pID)

exec sp_executesql @sql, @lista_param, @pID

return @@error
go

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

Dynamic Search Conditions in T-SQL
http://www.sommarskog.se/dyn-search.html

SQL Server y la Autoparametrizació
http://www.configuracionesintegrale...articulo33


AMB

"rafa" wrote:

Hola Comunidad.

Estoy intentando crear un procedimiento almacenado(server2005) que recibe
determinados paramentros (pero algunos de estos parametros pueden ser nulos).
Lo que estoy intentando es construir la clausula WHERE en el procedimiento
almacenado, una vez construido el where lanzo el select mediasnte EXEC.

El problema esta con los parametros que son uniqueidentifier.

El codigo del procedimiento es el siguiente
ALTER PROCEDURE prueba
(
@pID uniqueidentifier
)
AS
DECLARE @WHERE nvarchar(300)
SET @WHERE='WHERE Respuesta.ID IS NOT NULL '
IF @pID IS NOT NULL
SET @WHERE=@WHERE+'AND cast(Respuesta.ID as nvarchar='+cast(@pID as
nvarchar(36))

Exec('SELECT Respuesta.ID AS ID,Respuesta.Puntuacion AS Puntuacion
FROM Respuesta '+ @WHERE)


Cuando el valor es null no hay problema, pero cuando le asigno un valor
me da el siguiente error:

Mens. 102, Nivel 15, Estado 1, Línea 3
Sintaxis incorrecta cerca de '='.

Si alguien puede aportarme alguna idea.
Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida