2015-01-09 30 views
0

我有一個局部變量是另一個局部變量的名稱。我想將第一個局部變量的值更改爲另一個局部變量的值。沒有硬編碼,最好的方法是做什麼。另外,我只能讀取數據庫。 (最好是我不希望有寫什麼到數據庫)解決一個本地變量是被引用的局部變量的值

例如:

DECLARE @x1 VARCHAR(10), @x2 VARCHAR(10), @x3 VARCHAR(10), @x4 VARCHAR(10) 
DECLARE @y VARCHAR(10) 

SET @var1 = 'abc' 
SET @var2 = 'def' 
SET @var3 = 'ghi' 
SET @var4 = 'jkl' 

我想@y的值更改爲「ABC」如果@y最初等於「@ var1','def'如果初始值是'@ var2'等等

有沒有人知道如何做到這一點沒有硬編碼的價值,因爲我可能有更多的本地變量?

我知道這樣做的一種方法是使用包含所有變量的系統表進行工作。是否有類似於SQL的東西,如果是的話,該表的名稱是什麼,我如何從中讀取。

+4

貌似[XY問題(HTTP://meta.stackexchange .COM /問題/ 66377 /什麼,是最XY-問題)。 – peterm

+0

你仍然可以定義一個本地表變量,它只允許在只讀數據庫上 – radar

+0

我同意@peterm--嘗試告訴我們你正試圖解決的問題,而不是你提出的解決方案的問題。 –

回答

0

所有SQL注入的警告放在一邊......

使用sp_executesql,你能得到返回的輸出變量的變量的值。 由於@y有變量的名稱,所有你需要做的是建立,將指派該值的SQL語句@y

DECLARE @var1 VARCHAR(10), 
     @var2 VARCHAR(10), 
     @var3 VARCHAR(10), 
     @var4 VARCHAR(10), 
     @y  VARCHAR(10) = '@var1' 

SET @var1 = 'abc' 
SET @var2 = 'def' 
SET @var3 = 'ghi' 
SET @var4 = 'jkl' 

DECLARE @SQL NVARCHAR(MAX); 
SET @SQL = 'SET @y = ' + @y; 
EXEC sp_executesql @SQL, N' 
    @var1 VARCHAR(10), 
    @var2 VARCHAR(10), 
    @var3 VARCHAR(10), 
    @var4 VARCHAR(10), 
    @y  VARCHAR(10) OUT', 
    @var1, @var2, @var3, @var4, @y OUT 

SELECT @Y