TSQL在动态语句中使用系统函数

时间:2014-12-13 20:46:51

标签: sql-server tsql dynamic

是否可以在动态语句中使用@@ROWCOUNT之类的SQL Server系统函数?

我试图这样做却失败了:

USE NORTHWIND

SELECT * FROM Customers
EXEC ('SELECT ''RowCount is equal to ''' + CONVERT(varchar(10), @@ROWCOUNT))

它为我提供了“关键字'CONVERT'附近的语法错误”错误。

1 个答案:

答案 0 :(得分:2)

你可以这样做,但你不能直接在EXEC电话中这样做。 The grammar在下方。

{ EXEC | EXECUTE } 
    ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
    [ AS { LOGIN | USER } = ' name ' ]
[;]

因此除了字符串文字/变量(和参数)和+运算符之外,它不允许任何其他内容。

所以你需要将它连接到字符串 first 然后EXEC(@YourString)

DECLARE @Sql NVARCHAR(max);

SELECT *
FROM   Customers;

SET @Sql = 'SELECT ''RowCount is equal to ' + CONVERT(VARCHAR(10), @@ROWCOUNT) + '''';

EXEC (@Sql); 

但是你无论如何都不需要动态SQL。

SELECT 'RowCount is equal to ' + CONVERT(varchar(10), @@ROWCOUNT)

工作正常。

请注意,在SELECT的语句与检索行计数之间根本没有干预语句,否则它将被重置。