SQL将EXECUTE命令中的值存储到变量中

时间:2015-07-08 18:31:18

标签: sql sql-server tsql

我正在尝试将值存储到EXECUTE命令的变量中。我知道我想使用sp_executesql命令,但所有在线示例只会让人更加困惑。所以这就是我要做的。

我有一个存储过程,它接受两个参数(一个表名,一个房间#)。要拥有动态表名,我在使用字符串时使用动态SQL样式。我正在尝试存储来自多个表的电话号码。到目前为止,我已经完成了这项工作。

DECLARE @Location   varchar(MAX);
DECLARE @Room       varchar(10);
DECLARE @Number     char(8);
DECLARE @SQLString  varchar(MAX);

SET @Location = N'CMPhone.dbo.GardenCottage';
SET @Room = N'202';

SET @SQLString ='SET @Number = (SELECT PhoneNumber FROM ' + @Location + '     WHERE Room = ''' + @Room + ''');';
PRINT(@SQLString);

OUTPUT
SET @Number = (SELECT PhoneNumber FROM CMPhone.dbo.GardenCottage WHERE Room = '202');

SET @Number = (SELECT PhoneNumber FROM CMPhone.dbo.GardenCottage WHERE Room = '202');
PRINT(@Number);

OUTPUT
123-4567 

哪个是正确的号码。现在,问题就出现了。我需要使用动态SQL进行另一个查询,这样我就可以再次使用多个表了。所以在我的存储过程中,我需要将EXEC(@SQLString)存储到变量(@Number)中,这样我就可以使用该值,这就是我遇到问题的地方。我无法获取sp_executesql将值存储到@Number中。另一个查询看起来像这样

SET @SQLString = ' UPDATE PhoneNumbers SET Active = ''1'' WHERE
          PhoneNumber = ''' + @Number + ''';';
EXEC(@SQLString);

如果这无论如何令人困惑,或者您有疑问,请询问。很感谢任何形式的帮助。感谢

更新#1:

我现在有了这个新字符串

@SQLString = 'SELECT PhoneNumber FROM ' + @Location ' + ' WHERE Room = ''' + @Room + ''';';

EXECUTE SP_EXECUTESQL @SQLString

获取正确的数字,但我不知道如何设置OUTPUT参数。

我试图从微软

中关注这个例子
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @IntVariable INT
DECLARE @Lastlname varchar(30)
SET @SQLString = N'SELECT @LastlnameOUT = max(lname)
               FROM pubs.dbo.employee WHERE job_lvl = @level'
SET @ParmDefinition = N'@level tinyint,
                    @LastlnameOUT varchar(30) OUTPUT'
SET @IntVariable = 35
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@level = @IntVariable,
@LastlnameOUT=@Lastlname OUTPUT
SELECT @Lastlname

但我没看到他们如何声明lastlNameOUT变量。

1 个答案:

答案 0 :(得分:0)

EXECUTE sp_executesql中使用输出变量,如下所示:

EXECUTE sp_executesql @SQLString, N'@Number char(8) out',@Number out然后你将从dynamc sql中获取@Number值,然后你可以在查询的其他部分使用该值。希望这有帮助