ElH*_*aix 19 t-sql stored-procedures sql-server-2008
我有一个TSQL sproc,它构建一个查询并执行它,如下所示:
EXEC (@sqlTop + @sqlBody + @sqlBottom)
Run Code Online (Sandbox Code Playgroud)
@sqlTop包含类似SELECT TOP(x)col1,col2,col3 ......
TOP(x)将限制返回的行,所以稍后我想知道表中的实际行数与查询匹配的行数.
然后我用以下内容替换@sqlTop:
EXEC ('SELECT @ActualNumberOfResults = COUNT(*) ' + @sqlBody)
Run Code Online (Sandbox Code Playgroud)
我可以看出为什么这不起作用,为什么没有声明错误的值发生,但我认为它充分描述了我想要完成的事情.
有任何想法吗?
And*_*y M 16
您可以改为让动态查询将结果作为行集返回,然后使用INSERT ... EXEC语法将其插入到表变量(也可以是临时表或普通表)中.之后,您可以使用SELECT @var = ...以下方法将已保存的值读入变量:
DECLARE @rowcount TABLE (Value int);
INSERT INTO @rowcount
EXEC('SELECT COUNT(*) ' + @sqlBody);
SELECT @ActualNumberOfResults = Value FROM @rowcount;
Run Code Online (Sandbox Code Playgroud)
SQL*_*ace 14
使用sp_executesql和output parameter
例
DECLARE @sqlBody VARCHAR(500),@TableCount INT, @SQL NVARCHAR(1000)
SELECT @sqlBody = 'from sysobjects'
SELECT @SQL = N'SELECT @TableCount = COUNT(*) ' + @sqlBody
EXEC sp_executesql @SQL, N'@TableCount INT OUTPUT', @TableCount OUTPUT
SELECT @TableCount
GO
Run Code Online (Sandbox Code Playgroud)
dow*_*tch 13
当天晚些时候,我发现这种方法更简单:
-- test setup
DECLARE @sqlBody nvarchar(max) = N'SELECT MyField FROM dbo.MyTable WHERE MyOtherField = ''x''';
DECLARE @ActualNumberOfResults int;
-- the goods
EXEC sp_executesql @sqlBody;
SET @ActualNumberOfResults = @@ROWCOUNT;
SELECT @ActualNumberOfResults;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48913 次 |
| 最近记录: |