我有一个局部变量,它是另一个局部变量的名称。我想将第一个局部变量的值更改为另一个局部变量的值。在没有硬编码的情况下,最好的方法是什么?此外,我只有数据库的读访问权限。(最好是我不想在数据库中写入任何内容)
示例:
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最初等于'@var1',我想将@y的值更改为'abc‘,如果初始值为'@var2’,则更改为'def‘,依此类推
有没有人知道如何做到这一点而不在值中硬编码,因为我可能有更多的局部变量?
我知道这样做的一种方法是使用一个包含with all变量的系统表。SQL也有类似的东西吗?如果有,那么表的名称是什么,以及如何读取它。
发布于 2015-01-10 04:53:09
将所有SQL注入警告放在一边...
使用sp_executesql,您可以获得作为输出变量返回的变量的值。由于@y具有该变量的名称,因此您需要做的就是构建将该值赋给@y的SQL语句
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 @Yhttps://stackoverflow.com/questions/27852171
复制相似问题