2010-03-02 10 views
5

¿Hay alguna manera de convertir @my_variable cadena en un valor de @my_variable?t-sql obtener el valor de la variable de la cadena con nombre de variable

Tengo una tabla que almacena los nombres de las variables. Necesito obtener el valor de esta variable. Algo como esto:

DECLARE @second_variable AS NVARCHAR(20); 
DECLARE @first_variable AS NVARCHAR(20); 
SET @first_variable = '20'; 
SET @second_variable = SELECT '@first_variable'; --here I want that @second variable be assigned a value of "20". 

Respuesta

1

La solución más probable que su problema es hacer frente a/cambiar/corregir el diseño que se requiere por las que se have a table which stores names of variables.

0

intento sp_executesql

declare @f nvarchar(20) 
declare @s nvarchar(20) 
declare @sT nvarchar(100) 

set @f = '20' 
set @sT = 'set @s = ''' + @f + '''' 

exec sp_executesql @sT, N'@s nvarchar(20) output', @s output 

print @s 
+0

No creo que esto es lo que Markus quiere: Quiere convertir ''@ f'' (observe las comillas) a 20, con la cadena'' @ f'' proveniente de una tabla. En su ejemplo, usa '@ f' explícitamente, es decir, está enlazado en tiempo de compilación. – Heinzi

1

Puede utilizar sp_executesql para ejecutar cadenas (por lo que podría hacer algo como sp_executesql 'SET @second_variable = ' + @name_of_variable;). Sin embargo, simplemente poner esa declaración en sp_executesql no funcionará, ya que strings executed with sp_executesql or EXECUTE have their own variable scope, y, por lo tanto, ni @second_variable ni @first_variable son accesibles.

Por lo tanto, lo que podría hacer sería para mover su completa código (excluyendo el nombre de la variable) en un comunicado sp_executesql (no probado):

DECLARE @name_of_variable NVARCHAR(MAX) 
SET @name_of_variable = ... 

EXECUTE sp_executesql N'...lots of code... ' + @name_of_variable + ' ...lots of code...' 
+0

http://www.sommarskog.se/dynamic_sql.html –

Cuestiones relacionadas