2014-12-13 3 views
1

Возможно ли использовать системные функции SQL Server, такие как @@ROWCOUNT в динамическом выражении?TSQL с использованием системных функций в динамическом выражении

Я пытался это сделать, но не смог:

USE NORTHWIND 

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

Это дает мне «Неправильный синтаксис около ключевого слова„CONVERT“» ошибка.

ответ

2

Вы можете сделать, но вы не можете сделать это прямо в вызове EXEC. The grammar ниже.

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

так что ничего, кроме строковых литералов/переменных (и параметры) и оператора + не позволяют.

Так что вам нужно будет объединить ее в строку первого затем 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 не было промежуточных операторов, и чтобы получить номер строки или он будет сброшен.

Смежные вопросы