Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/03/2013, 09:44
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Extraer variables de un varchar

a ya, si definimos que sea @ inicio de cadena y ' ' fin de cadena podemos usar un charindex y un substring :P con algo como esto:

Código SQL:
Ver original
  1. DECLARE @query VARCHAR(MAX)
  2. DECLARE @query2 VARCHAR(MAX)
  3. DECLARE @x INT
  4. DECLARE @fin INT
  5. DECLARE @continue INT
  6.  
  7. CREATE TABLE #temp(
  8. VALUE VARCHAR(MAX)
  9. )
  10.  
  11. SET @x=1
  12. SET @query='select * FROM TABLA WHERE LOQUESEA = @LOQUESEA AND ALGOMAS = @ALGOMAS variable=@variable otravariable=@aquimero '
  13. while @x<=100
  14. BEGIN
  15. print 'entra'
  16.     INSERT INTO #temp
  17.     SELECT SUBSTRING(@query,CHARINDEX('@',@query,1),charindex(' ',@query,CHARINDEX('@',@query,1))-CHARINDEX('@',@query,1))
  18.     SELECT @query2=SUBSTRING(@query,charindex(' ',@query,CHARINDEX('@',@query,1)),LEN(@query))
  19.    
  20.     SELECT @continue=charindex(' ',@query,CHARINDEX('@',@query,1))
  21.     SELECT @fin=LEN(@query)+1
  22.    
  23.     IF @continue=@fin  
  24.         SET @x=100
  25.    
  26.     IF @x<>100
  27.     BEGIN  
  28.         INSERT INTO #temp
  29.         SELECT SUBSTRING(@query2,CHARINDEX('@',@query2,1),charindex(' ',@query2,CHARINDEX('@',@query2,1))-CHARINDEX('@',@query2,1))
  30.         SELECT @query2=SUBSTRING(@query2,charindex(' ',@query2,CHARINDEX('@',@query2,1)),LEN(@query2))
  31.         SELECT @continue=charindex(' ',@query2,CHARINDEX('@',@query2,1))
  32.         SELECT @fin=LEN(@query2)+1
  33.     END
  34.     SET @query=@query2
  35.     SET @x=@x+1
  36.    
  37.     IF @continue=@fin  
  38.         SET @x=100
  39. END
  40.  
  41. SELECT * FROM #temp
  42. DROP TABLE #temp
  43.  
  44. ----------------------Resultado--------------------------------
  45. @LOQUESEA
  46. @ALGOMAS
  47. @variable
  48. @aquimero

Lo unico que debes de tener en cuenta es que siempre te va a buscar @ como inicio y ' ' como fin de busqueda de la variable, si te fijas en la cadena que puse

'select * FROM TABLA WHERE LOQUESEA = @LOQUESEA AND ALGOMAS = @ALGOMAS variable=@variable otravariable=@aquimero '

la ultima variable tiene un espacio en blanco antes de la comilla simple, si no lo pones pues no junciona jajajajaja :P

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me