2014-01-07 4 views
2

Iam пытается получить общее количество строк таблицы с помощью динамического запроса, но в конце концов я не могу этого сделать. вот мой вопрос:Динамический запрос в sqlserver

declare @sql NVARCHAR(MAX); 
declare @result VARCHar(20); 
declare @s varchar(10); 
set @s='country'; 
SET @sql = 'SELECT '[email protected] +'=COUNT(*) FROM '[email protected] 
EXEC (@sql); 
select @result; 

iam получает значение NULL в @result.

+0

вы не устанавливая переменную результата так пусто, и я не уверен, какой результат вы ожидаете от этих линий SQL –

+0

Так скажите мне, как установить его – Subodh

+0

set @ result = 'some thing' –

ответ

0

вам нужно сделать что-то вроде этого ...

DECLARE @sql NVARCHAR(MAX); 
DECLARE @COUNT INT; 
DECLARE @TableName NVARCHAR(128); 

SET @TableName = 'TableName'; 

SET @sql = N'SELECT @COUNT = COUNT(*) FROM '+ QUOTENAME(@TableName) 

EXECUTE sp_executesql @sql 
        , N'@COUNT INT OUTPUT' 
        , @COUNT OUTPUT 
SELECT @COUNT 
0
declare @sql NVARCHAR(MAX) 
declare @result VARCHAR(20) 
declare @s varchar(10) 
set @s='country' 
SET @sql = 'SELECT @result = COUNT(*) FROM '+ QUOTENAME(@s) 
EXEC sp_executesql @sql,N'@result varchar(20) OUTPUT',@result output 
SELECT @result 
+0

конструктивная критика: вы всегда должны использовать функцию 'QUOTENAME()' с именами объектов sql-сервера, может спасти вас от возможной атаки на SQL-инъекцию. –

+0

хороший момент, я обновил его. Благодарю. – Jayvee

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