我有代码:
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;
此请求返回
在“stn”列中,我希望查询结果不是查询。 怎么做 ?请帮忙。
答案 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)
动态执行