Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Procedimiento almacenado con errores ayudita

Estas en el tema de Procedimiento almacenado con errores ayudita en el foro de SQL Server en Foros del Web. Hola a todos... Tengo el siguiente procedimiento almacenado... Cita: CREATE PROCEDURE [dbo].[spTABLE_TEMPORARY_PLAYER] @Player VARCHAR(10), @Name VARCHAR(50), @LastName VARCHAR(50), @Email VARCHAR(50), @Password VARCHAR(50), @Phone VARCHAR(50), @Zip ...
  #1 (permalink)  
Antiguo 06/11/2013, 12:11
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Pregunta Procedimiento almacenado con errores ayudita

Hola a todos...

Tengo el siguiente procedimiento almacenado...
Cita:
CREATE PROCEDURE [dbo].[spTABLE_TEMPORARY_PLAYER]
@Player VARCHAR(10),
@Name VARCHAR(50),
@LastName VARCHAR(50),
@Email VARCHAR(50),
@Password VARCHAR(50),
@Phone VARCHAR(50),
@Zip VARCHAR(50),
@Status CHAR(1),
@LoginDateStart VARCHAR(25),
@LoginDateEnd VARCHAR(25),
@Ip VARCHAR(15),
@WebSite INT,
@Success CHAR(1)
AS
BEGIN
IF OBJECT_ID('tempDB..#PlayerTemp','U') IS NOT NULL
DROP TABLE #PlayerTemp;


DECLARE @StatusAux VARCHAR
DECLARE @WebsiteAux INT
DECLARE @SuccessAux CHAR(1)

IF @Status <> ''
SET @StatusAux = 'AND Status = ' + @Status
ELSE
SET @StatusAux = ''

SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook
INTO #PlayerTemp
FROM PLAYER
WHERE Player LIKE @Player AND Name LIKE @Name AND LastName LIKE @LastName AND
Email LIKE @Email AND Password LIKE @Password AND Phone LIKE @Phone AND
Zip LIKE @Zip + '' + @StatusAux

IF @WebSite <> 0
SET @WebsiteAux = 'AND B.[id] = ' + @WebSite
ELSE
SET @WebsiteAux = ''

IF @Success <> 'Y' AND @Success <> 'N'
SET @SuccessAux = ''
ELSE
SET @SuccessAux = ' AND L.[success] = '+ @Success

SELECT TOP 10000 P.[IdPlayer], P.[Player], L.[username], L.[password], L.[ip_address], L.[login_date],
L.[success],D.[Description], B.[host_name],
P.[Name] + ' ' + P.[LastName] AS 'Name', P.Email
FROM [BackOffice_Dev].[dbo].[login] L, [dbo].[#PlayerTemp] P, BOOK D, [BackOffice_Dev].[dbo].[book] B
WHERE D.[IdBook] = P.[IdBook] AND L.[book_id] = B.[book_id] AND D.[IdBook] = L.[book_id]
AND P.[player] = L.[username] AND B.[id] = L.[website_id]
AND L.[login_date] >= convert(datetime,(@LoginDateStart))
AND L.[login_date] <= convert(datetime,(@LoginDateEnd))
AND L.[ip_address] LIKE @Ip + @WebsiteAux + @SuccessAux
ORDER BY L.[login_date] DESC
END
El problema que tengo es que los IF que estoy haciendo para validar algunas cosas no esta funcionando y al ejecutar el procedimiento me da el siguiente error:
Cita:
(31 row(s) affected)
Msg 245, Level 16, State 1, Procedure spTABLE_TEMPORARY_PLAYER, Line 47
Conversion failed when converting the varchar value '%%' to data type int.
Eso quiere decir que si me crea la tabla temporal pero el segundo select me esta fallando, alguna ayuda al respecto ?
  #2 (permalink)  
Antiguo 06/11/2013, 12:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado con errores ayudita

no se que datos te regrese tu query ni que columna es la que cause el error pero lo que pasa puede ser lo siguiente:

* Quieres comparar un valor string contra un entero
* se esta haciendo una conversion explicita de un campo string a entero

verifica bien los valores que regresa tu query y ve en donde estas usando valores enteros
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 06/11/2013, 12:19
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Respuesta: Procedimiento almacenado con errores ayudita

Gracias...

Creo que es en esta parte:
Cita:
IF @WebSite <> 0
SET @WebsiteAux = 'AND B.[id] = ' + @WebSite
ELSE
SET @WebsiteAux = ''
Puedes decirme como puedo declarar a @WebsiteAux de la forma que deseo hacerlo?
  #4 (permalink)  
Antiguo 06/11/2013, 12:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado con errores ayudita

porque declaras websiteaux como entero??? no tendria que ser de tipo varchar???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 06/11/2013, 15:58
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Exclamación Respuesta: Procedimiento almacenado con errores ayudita

Amigo...
Ahora este es mi procedimiento almacenado...
Cita:
CREATE PROCEDURE [dbo].[spTABLE_TEMPORARY_PLAYER]
@Player VARCHAR(10),
@Name VARCHAR(50),
@LastName VARCHAR(50),
@Email VARCHAR(50),
@Password VARCHAR(50),
@Phone VARCHAR(50),
@Zip VARCHAR(50),
@Status CHAR(1),
@LoginDateStart VARCHAR(25),
@LoginDateEnd VARCHAR(25),
@Ip VARCHAR(15),
@WebSite INT,
@Success CHAR(1)
AS
BEGIN
IF OBJECT_ID('tempDB..#PlayerTemp','U') IS NOT NULL
DROP TABLE #PlayerTemp;


DECLARE @StatusAux VARCHAR
DECLARE @WebsiteAux VARCHAR
DECLARE @SuccessAux CHAR(1)

IF @Status <> ''
SET @StatusAux = 'AND Status = ' + @Status
ELSE
SET @StatusAux = ''

SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook
INTO #PlayerTemp
FROM PLAYER
WHERE Player LIKE @Player AND Name LIKE @Name AND LastName LIKE @LastName AND
Email LIKE @Email AND Password LIKE @Password AND Phone LIKE @Phone AND
Zip LIKE @Zip + '' + @StatusAux

IF @WebSite <> 0
SET @WebsiteAux = 'AND B.[id] = ' + @WebSite
ELSE
SET @WebsiteAux = ''

IF @Success <> 'Y' AND @Success <> 'N'
SET @SuccessAux = ''
ELSE
SET @SuccessAux = ' AND L.[success] = '+ @Success

SELECT TOP 10000 P.[IdPlayer], P.[Player], L.[username], L.[password], L.[ip_address], L.[login_date],
L.[success],D.[Description], B.[host_name],
P.[Name] + ' ' + P.[LastName] AS 'Name', P.Email
FROM [BackOffice_Dev].[dbo].[login] L, [dbo].[#PlayerTemp] P, BOOK D, [BackOffice_Dev].[dbo].[book] B
WHERE D.[IdBook] = P.[IdBook] AND L.[book_id] = B.[book_id] AND D.[IdBook] = L.[book_id]
AND P.[player] = L.[username] AND B.[id] = L.[website_id]
AND L.[login_date] >= convert(datetime,(@LoginDateStart))
AND L.[login_date] <= convert(datetime,(@LoginDateEnd))
AND L.[ip_address] LIKE @Ip + @WebsiteAux + @SuccessAux
ORDER BY L.[login_date] DESC

END
Pero al parecer los if no me quieren funcionar por que la consulta no me arroja datos y si deberia !
  #6 (permalink)  
Antiguo 06/11/2013, 16:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado con errores ayudita

estas usando sql server?? si sabias que en sql server no se puede hacer un query dinamico como lo estas haciendo? tendrias que hacer algo como esto:

Código SQL:
Ver original
  1. DECLARE @query VARCHAR(MAX)
  2. SET @query='select * from tabla'
  3. IF @valor=1 THEN
  4.  SET @query=@query + ' where valor=20'
  5. ELSE
  6.  SET @query=@query + ' where valor=50'
  7.  
  8.  EXEC sp_executesql @query
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 06/11/2013, 16:16
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
De acuerdo Respuesta: Procedimiento almacenado con errores ayudita

Gracias eso no lo sabia y pues ahora ya aprendi algo
Seguire intentanto y te aviso
  #8 (permalink)  
Antiguo 06/11/2013, 16:26
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Pregunta Respuesta: Procedimiento almacenado con errores ayudita

Amigo entonces quiere decir que si yo tengo 10 diferentes opciones o tipos de consultas que se pueden dar debo de hacerlas asi, osea almacenar la consulta en una varables y al final del procedimiento ejecutar dicha variable ?
  #9 (permalink)  
Antiguo 06/11/2013, 16:38
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Procedimiento almacenado con errores ayudita

si son como el ejemplo que mencionas SI
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 06/11/2013, 17:57
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Pregunta Respuesta: Procedimiento almacenado con errores ayudita

Amigo actualmente lo tengo asi el procedimiento:
Cita:
CREATE PROCEDURE [dbo].spSEARCH_MAS
@Player VARCHAR(10),
@Name VARCHAR(50),
@LastName VARCHAR(50),
@Email VARCHAR(50),
@Password VARCHAR(50),
@Phone VARCHAR(50),
@Zip VARCHAR(50),
@Status CHAR(1),
@LoginDateStart VARCHAR(25),
@LoginDateEnd VARCHAR(25),
@Ip VARCHAR(15),
@WebSite INT,
@Success CHAR(1)
AS
BEGIN
DECLARE @CREATE_TLB_TEMP NVARCHAR(MAX) -- QUERY TO CREATE THE TEMPORARY TABLE
DECLARE @QUERY_SEARCH NVARCHAR(MAX) -- QUERY THAT PERFORMED THE SEARCHING

IF OBJECT_ID('tempDB..#PlayerTemp','U') IS NOT NULL
DROP TABLE #PlayerTemp;

SET @CREATE_TLB_TEMP = 'SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook INTO #PlayerTemp FROM PLAYER '

IF @Status <> 'E' OR @Status <> 'D' BEGIN
SET @CREATE_TLB_TEMP = @CREATE_TLB_TEMP + 'WHERE Player LIKE '+@Player+' AND Name LIKE '+@Name+'
AND LastName LIKE '+@LastName+' AND Email LIKE '+@Email+'
AND Password LIKE '+@Password+' AND Phone LIKE '+@Phone+'
AND Zip LIKE '+@Zip
END
ELSE BEGIN
SET @CREATE_TLB_TEMP = @CREATE_TLB_TEMP + 'WHERE Player LIKE '+@Player+' AND Name LIKE '+@Name+'
AND LastName LIKE '+@LastName+' AND Email LIKE '+@Email+'
AND Password LIKE '+@Password+' AND Phone LIKE '+@Phone+'
AND Zip LIKE '+@Zip+' AND Status = '+@Status
END

EXEC sp_executesql @CREATE_TLB_TEMP
END
Al ejecutarlo de esta forma:
Cita:
EXEC [dbo].spSEARCH_MAS '%%','%test%','%%','%%','%%','%%','%%','D','2013-09-01 00:00:00','2013-11-06 15:45:00','%%',0,'Y'
Me da este error:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'AND'.

Última edición por adryan310; 06/11/2013 a las 18:26
  #11 (permalink)  
Antiguo 07/11/2013, 11:20
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Procedimiento almacenado con errores ayudita

¿Ya revistaste en la línea especifica lo que tienes?

Msg 156, Level 15, State 1, Line 1
__________________
MCTS Isaias Islas

Etiquetas: almacenado, errores, procedimiento, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:35.