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

set @variable concatenar con un numero

Estas en el tema de set @variable concatenar con un numero en el foro de SQL Server en Foros del Web. Buenas, una ayuda con esto que no funciona bien @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original DECLARE @document VARCHAR ( 64 ) , @campo VARCHAR ( ...
  #1 (permalink)  
Antiguo 12/09/2016, 19:31
 
Fecha de Ingreso: mayo-2008
Mensajes: 353
Antigüedad: 15 años, 10 meses
Puntos: 3
set @variable concatenar con un numero

Buenas, una ayuda con esto que no funciona bien

Código SQL:
Ver original
  1. DECLARE @document VARCHAR(64),@campo VARCHAR(25),@campov VARCHAR(25),@campo1 VARCHAR(35),@campo2 VARCHAR(35),@campo3 VARCHAR(35), @pos, @pos1
  2.  
  3. SELECT @document = 'Reflectors;are;vital;safety components55;of your bicycle.'  
  4.  
  5. SET @campov= SUBSTRING(@document,@pos,@pos1-@pos)
  6. SELECT @campo + '' + CONVERT(VARCHAR,@intFlag) + '=' + @campov

el select deberia mostrar datos y no muestra nada solo varlo nulo

si ejecuto solo asi: select @campo1 o @campo2 o @ campo3 funciona bien pero lo anterior no,Donde estoy cometiendo el error

sql server 2008

gracias

Última edición por gnzsoloyo; 13/09/2016 a las 18:42
  #2 (permalink)  
Antiguo 13/09/2016, 08:32
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, 7 meses
Puntos: 774
Respuesta: set @variable concatenar con un numero

de que asi no se hace una asignacion de valores dinamica, para eso tendrias que construir un query dinamico, te recomiendo que investigues sobre como regresar valores usando la instruccion sp_executesql

tu query quedaria de esta manera:

Código SQL:
Ver original
  1. DECLARE @document VARCHAR(64),@campo VARCHAR(25),@campov VARCHAR(25),@campo1 VARCHAR(35),@campo2 VARCHAR(35),@campo3 VARCHAR(35), @pos, @pos1
  2. DECLARE @query Nvarchar(MAX)
  3.  
  4. SELECT @document = 'Reflectors;are;vital;safety components55;of your bicycle.'
  5.  
  6. SET @campov= SUBSTRING(@document,@pos,@pos1-@pos)
  7. SET @query=@campo + CONVERT(VARCHAR,@intFlag) + '=' + @campov
  8. EXEC sp_executesql @query

ahora a lo que comentaste que traes un archivo con valores separados por ",", de ser asi podrias usar un BCP insert o un bulk insert para poner tus datos en orden, otra cosa que podrias usar es una funcion como esta:

Código SQL:
Ver original
  1. /****** Object:  UserDefinedFunction [dbo].[SplitApplication]    Script Date: 10/19/2010 15:12:35 ******/
  2. SET ANSI_NULLS ON
  3. GO
  4.  
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7.  
  8. CREATE FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(2000))
  9.  
  10. RETURNS @RtnValue TABLE
  11. (
  12. Id INT IDENTITY(1,1),
  13. DATA nvarchar(100)
  14. )
  15. AS
  16. BEGIN
  17. DECLARE @Cnt INT, @SplitOn nvarchar(5)
  18. SET @SplitOn = ','
  19. SET @Cnt = 1
  20.  
  21. While (Charindex(@SplitOn,@applicationid)>0)
  22. BEGIN
  23. INSERT INTO @RtnValue (DATA)
  24. SELECT
  25. DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-1)))
  26.  
  27. SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+1,len(@applicationid))
  28. SET @Cnt = @Cnt + 1
  29. END
  30.  
  31. INSERT INTO @RtnValue (DATA)
  32. SELECT DATA = ltrim(rtrim(@applicationid))
  33.  
  34. RETURN
  35. END
  36.  
  37. GO

una vez creada la funcion la usamos de la siguiente manera:

Código SQL:
Ver original
  1. how TO USE :
  2.  
  3. SELECT * FROM TABLE WHERE DATA IN (
  4.  
  5. SELECT * FROM SplitApplication('1,1,1,1')
  6. )

en tu caso cambiarias la "," por ";"
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 13/09/2016 a las 08:43

Etiquetas: concatenar, numero, server, set, sql, 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 14:31.