SQL - 查询作为参数

时间:2017-01-04 08:59:36

标签: sql sql-server tsql sp-executesql

我有代码:

DECLARE @sqlQuery NVARCHAR(4000);
DECLARE @stn NVARCHAR(4000);
SET @stn=N'SELECT cast(isnull(SUBSTRING(CDN.DokSumT(16,739684,1045,1,32768,1,1,739684,1,2,1,0,78877,0,3,1,1,0,0,0,0,0,-1) , 9 , 7 ),0) as decimal (28,4))';
SELECT @sqlQuery = 'SELECT GIDNumber, Name, @stn as stn FROM Table_342 WHERE Name LIKE ''%ABLE%''';
EXEC sp_executesql @sqlQuery, N'@stn NVARCHAR(4000)', @stn;

此请求返回

enter image description here

在“stn”列中,我希望查询结果不是查询。 怎么做 ?请帮忙。

2 个答案:

答案 0 :(得分:2)

尝试这样的事情......

DECLARE @sqlQuery   NVARCHAR(MAX) 
      , @stn        NVARCHAR(MAX)
      , @stn_R  DECIMAL(28,4);

SET @stn = N'SELECT @stn_R = cast(isnull(SUBSTRING(CDN.DokSumT(16,739684,1045,1,32768,1,1,739684,1,2,1,0,78877,0,3,1,1,0,0,0,0,0,-1) , 9 , 7 ),0) as decimal (28,4))';

EXEC sp_executesql @stn 
                 , N'@stn_R DECIMAL(28,4) OUTPUT' 
                 , @stn_R OUTPUT

SELECT @sqlQuery = 'SELECT GIDNumber, Name, @stn_R as stn FROM Table_342 WHERE Name LIKE ''%ABLE%''';

EXEC sp_executesql @sqlQuery
                 , N'@stn_R DECIMAL(28,4)'
                 , @stn_R;

注意

您的整个查询被视为参数,因为sp_executesql只有第一个参数需要SQL语句,任何后续参数都是变量声明或变量值。

您需要将动态查询的执行拆分为两个并使用输出参数从第一个查询中获取值并将其传递给第二个查询。

答案 1 :(得分:1)

首先尝试非动态方式。一旦你使用EXEC(@sqlquery)

动态执行