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

Como pasar la siguiente variable varchar a int sqlserver

Estas en el tema de Como pasar la siguiente variable varchar a int sqlserver en el foro de SQL Server en Foros del Web. Hola gente, tengo esta consulta que me funciona bien y me almacena en una variable los id de una tabla separados por comas (,) @import ...
  #1 (permalink)  
Antiguo 17/01/2014, 10:48
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Pregunta Como pasar la siguiente variable varchar a int sqlserver

Hola gente,

tengo esta consulta que me funciona bien y me almacena en una variable los id de una tabla separados por comas (,)
Código SQL:
Ver original
  1. DECLARE @IdWagerParlay VARCHAR(MAX)
  2. SET @IdWagerParlay=''
  3. SELECT  @IdWagerParlay = @IdWagerParlay + CONVERT(VARCHAR(20),D.[IdWager]) + ',' FROM GRADEDWAGERDETAIL D, GRADEDWAGERHEADER H, GAME G, PERIOD P, AGENT A, WAGERTYPE W
  4. WHERE   D.[IdWager]     = H.[IdWager] AND
  5.         D.[IdGame]      = G.[IdGame]  AND
  6.         H.[IdAgent]     = A.[IdAgent] AND
  7.         H.[IdWagerType] = W.[IdWagerType] AND
  8.         D.[IdSport]     = P.[IdSport] AND
  9.         D.[Period]      = P.[NumberOfPeriod] AND
  10.         W.[Description] LIKE '%PARLAY%' AND
  11.         H.[SettledDate] >= CONVERT(datetime,('2014-01-16 00:00:01')) AND
  12.         H.[SettledDate] <= CONVERT(datetime,('2014-01-16 23:59:59')) AND
  13.         H.[IdAgent] = 5039
  14. GROUP BY D.[IdWager]
  15.  
  16. SET @IdWagerParlay=SUBSTRING(@IdWagerParlay,1,len(@IdWagerParlay)-1)
Pero tengo un pequeño gran inconveniente ya que esta variable es de tipo varchar y quiero hacer el siguiente select pero en la tabla el dato al que yo le aplico el IN es de tipo entero y como los IN necesitan estar separados por comas fue por lo que guarde los id en la variable separados de esa manera:
Código SQL:
Ver original
  1. SELECT * FROM GRADEDWAGERDETAIL D WHERE IdWager IN (@IdWagerParlay)
Como podria solucionar mi problema? gracias
  #2 (permalink)  
Antiguo 17/01/2014, 11:12
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: Como pasar la siguiente variable varchar a int sqlserver

te pregunte para que necesitabas esa variable y no me comentaste, aqui lo mas sencillo es que guardes el resultado en una variable de tipo tabla(hay una funcion para hacer lo que necesitas pero es mas codigo)

Código SQL:
Ver original
  1. DECLARE @IdWagerParlay TABLE (id INT)
  2.  
  3. INSERT INTO @IdWagerParlay
  4. SELECT  D.[IdWager]  FROM GRADEDWAGERDETAIL D, GRADEDWAGERHEADER H, GAME G, PERIOD P, AGENT A, WAGERTYPE W
  5. WHERE   D.[IdWager]     = H.[IdWager] AND
  6.         D.[IdGame]      = G.[IdGame]  AND
  7.         H.[IdAgent]     = A.[IdAgent] AND
  8.         H.[IdWagerType] = W.[IdWagerType] AND
  9.         D.[IdSport]     = P.[IdSport] AND
  10.         D.[Period]      = P.[NumberOfPeriod] AND
  11.         W.[Description] LIKE '%PARLAY%' AND
  12.         H.[SettledDate] >= CONVERT(datetime,('2014-01-16 00:00:01')) AND
  13.         H.[SettledDate] <= CONVERT(datetime,('2014-01-16 23:59:59')) AND
  14.         H.[IdAgent] = 5039
  15. GROUP BY D.[IdWager]
  16.  
  17. SELECT * FROM GRADEDWAGERDETAIL D WHERE IdWager IN (SELECT * FROM @IdWagerParlay)

este es un modo y este es otro:

Código SQL:
Ver original
  1. SELECT  D.[IdWager] INTO #temp  FROM GRADEDWAGERDETAIL D, GRADEDWAGERHEADER H, GAME G, PERIOD P, AGENT A, WAGERTYPE W
  2. WHERE   D.[IdWager]     = H.[IdWager] AND
  3.         D.[IdGame]      = G.[IdGame]  AND
  4.         H.[IdAgent]     = A.[IdAgent] AND
  5.         H.[IdWagerType] = W.[IdWagerType] AND
  6.         D.[IdSport]     = P.[IdSport] AND
  7.         D.[Period]      = P.[NumberOfPeriod] AND
  8.         W.[Description] LIKE '%PARLAY%' AND
  9.         H.[SettledDate] >= CONVERT(datetime,('2014-01-16 00:00:01')) AND
  10.         H.[SettledDate] <= CONVERT(datetime,('2014-01-16 23:59:59')) AND
  11.         H.[IdAgent] = 5039
  12. GROUP BY D.[IdWager]
  13.  
  14. SELECT * FROM GRADEDWAGERDETAIL D WHERE IdWager IN (SELECT * FROM #temp)

saludos....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 17/01/2014, 11:37
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
De acuerdo Respuesta: Como pasar la siguiente variable varchar a int sqlserver

Muchas gracias amigo eres muy amable ya te debo varias
  #4 (permalink)  
Antiguo 17/01/2014, 11:42
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: Como pasar la siguiente variable varchar a int sqlserver

como breviario cultural te dejo la funcion para hacer el IN con una variable(separada por comas, pipes o el caracter que quieras)

Código SQL:
Ver original
  1. CREATE FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(2000))
  2.  
  3. RETURNS @RtnValue TABLE
  4. (
  5. Id INT IDENTITY(1,1),
  6. DATA nvarchar(100)
  7. )
  8. AS
  9. BEGIN
  10. DECLARE @Cnt INT, @SplitOn nvarchar(5)
  11. SET @SplitOn = ','
  12. SET @Cnt = 1
  13.  
  14. While (Charindex(@SplitOn,@applicationid)>0)
  15. BEGIN
  16. INSERT INTO @RtnValue (DATA)
  17. SELECT
  18. DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-1)))
  19.  
  20. SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+1,len(@applicationid))
  21. SET @Cnt = @Cnt + 1
  22. END
  23.  
  24. INSERT INTO @RtnValue (DATA)
  25. SELECT DATA = ltrim(rtrim(@applicationid))
  26.  
  27. RETURN
  28. END
  29.  
  30. GO
  31.  
  32.  
  33. how TO USE :
  34.  
  35. SELECT * FROM TABLE WHERE DATA IN (
  36.  
  37. SELECT * FROM SplitApplication('1,1,1,1')
  38. )
  39.  
  40. como la usarias en tu ejemplo:
  41.  
  42. SELECT * FROM GRADEDWAGERDETAIL D WHERE IdWager IN (SELECT * FROM SplitApplication(@IdWagerParlay))

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 17/01/2014, 11:44
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: Como pasar la siguiente variable varchar a int sqlserver

Cita:
Iniciado por adryan310 Ver Mensaje
Muchas gracias amigo eres muy amable ya te debo varias
No eres el primero ni el ultimo que me debe varias
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: group, int, select, siguiente, tabla, varchar, variable
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 03:30.