SQL-查询作为参数

SQL-查询作为参数,sql,sql-server,tsql,sp-executesql,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 = 'SELEC

我有密码:

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”列中,我希望有一个查询结果,而不是查询。
怎么做?请帮忙。

试试这样的

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;

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


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

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

我不得不问,尽管我怀疑答案是“是”和“不知道”-这绝对是解决问题的最有效方法吗?谁设计了这个数据库?我不知道,但我想是这样:)我有这个错误消息137,级别15,状态2,第1行必须声明标量变量“@stan”。