2010-03-02 20 views
5

Esiste un modo per convertire la stringa @my_variable in un valore di @my_variable?t-sql ottiene il valore variabile dalla stringa con nome variabile

Ho una tabella che memorizza i nomi delle variabili. Ho bisogno di ottenere il valore di questa variabile. Qualcosa di simile a questo:

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". 

risposta

1

La più probabile soluzione al vostro problema è quello di affrontare/modificare/correggere il disegno che richiede il motivo per cui si farebbe have a table which stores names of variables.

0

prova 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

Non credo che questo è ciò che Markus vuole: Vuole convertire ''@ f'' (nota le virgolette) a 20, con la stringa'' @ f'' che proviene da una tabella. Nel tuo esempio, usi '@ f' esplicitamente, cioè, è vincolato al momento della compilazione. – Heinzi

1

È possibile utilizzare sp_executesql per eseguire stringhe (così si potrebbe fare qualcosa di simile sp_executesql 'SET @second_variable = ' + @name_of_variable;). Tuttavia, il solo inserimento di questa istruzione in sp_executesql non funzionerà, dal strings executed with sp_executesql or EXECUTE have their own variable scope e, pertanto, né @second_variable né @first_variable sono accessibili.

Allora, che cosa si potrebbe fare sarebbe quella di spostare il completa codice (escludendo il nome della variabile) in un sp_executesql dichiarazione (non testata):

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 –

Problemi correlati