我有一个带有以下动态查询的存储过程
ALTER PROCEDURE [dbo].[Del_AE_Update]
@uid nvarchar(MAX)
AS
BEGIN
Declare @AEname varchar(MAX);
Declare @sqlquery varchar(MAX);
Set @sqlquery = ('Select name FROM OPENQUERY(CRM_MYSQL,''Select name From tscrm_prod.user_info where uid='+@uid+''')')
Select @sqlquery
END
但是我得到了名字的价值。我希望将它分配给@sqlquery
,因为我需要在程序的下一部分中使用它。
这就是我的结果。
name= Dallas-BDD
@sqlquery = 'Select name FROM OPENQUERY...
答案 0 :(得分:1)
您必须执行查询字符串(@sqlquery)才能获取查询的值。为了能够将动态查询的结果转换为变量,您需要将sp_executesql与一个输入和一个输出参数一起使用。
网上有很多例子。
它看起来像这样: (这是一个简化版本,可以给你一个想法)
DECLARE @ParmDefinition nvarchar(500);
Declare @sqlquery nvarchar(4000);
Declare @name varchar(100);
Set @sqlquery =('Select @name= UserName From tmp_users where userid=@uid')
SET @ParmDefinition = N'@uid varchar(max),
@name nvarchar(25) OUTPUT';
EXECUTE sp_executesql
@sqlquery
,@ParmDefinition
,@uid = 1
,@name = @name OUTPUT;
Select @name -- which you will be able to use to continue in your SP