2012-05-10 3 views
0

Я играю с t-sql и хотел бы иметь возможность выбирать какую-то переменную.Выбор значения в переменной

В настоящее время я просто хочу получить счет (*) для каждой таблицы в базе данных и напечатать это.

Когда я попробовать следующее:

EXEC ('SELECT COUNT (*) FROM' + @TABLE_NAME)

Это дает отсчеты для всех строк, теперь я хотел бы для сохранения COUNT (*) в переменную. Для этого я объявил. Я попробовал несколько различных подходов, среди прочего, это одно:

EXEC ('SELECT' + @row_count + '= COUNT (*) FROM' + @TABLE_NAME)

Что дает error (Msg 102, Level 15, State 1, Line 1 Неверный синтаксис около '='.).

Любая идея, как правильно выразить это?

+0

Почему вы строите запрос динамически? SELECT @row_count = COUNT (1) FROM YourTable – zimdanen

ответ

1

Существует более эффективный способ получить количество строк в таблице, просмотрев метаданные базы данных. Вот альтернативное решение:

declare @NumRows int; 
select @NumRows = sum(rows) 
from <database>.sys.partitions P join 
    <database>.sys.tables T 
     on T.[object_id] = P.[object_id] 
where index_id IN (0,1) AND T.[type] = 'U' and t.name = '<table>' 
+0

Я пробовал искать в sys.tables, еще не знал о sys.partitions. Благодаря! – fuaaark

+2

@fuaaark Один незначительный недостаток: в качестве примечаний к документации значение sys.partitions.rows является «приблизительным», поэтому оно может быть или не быть подходящим для ваших целей. – Pondlife

2

Вам нужно будет использовать sp_executesql.

Проверьте, пожалуйста, this article.

0

Возможно сделать так:

declare @rowcount int 
declare @table_name nvarchar(10) 
declare @sql nvarchar(max); 
set @table_name = N'test'; 
set @sql = N'SELECT COUNT(*) FROM '[email protected]_name; 
execute sp_executesql @sql,N'@rowcount int output',@rowcount = @rowcount output; 
select @rowcount; 
+0

нет, вы получите код возврата от EXEC IIRC – gbn

1

Вы должны обеспечить выходную переменную из запроса и указать, что для вывода:

declare @table_name nvarchar(100) 
declare @row_count int 
declare @sql nvarchar(max) 

set @table_name = 'YOUR TABLE NAME' 

set @sql = N'SELECT @row_count = COUNT(*) FROM '+ @table_name 
exec sp_executesql @sql, N'@row_count int output', @row_count = @row_count output 
print @row_count 
0

Переменная должна быть объявлена ​​в соответствующем контексте. Попробуйте

declare @table_name varchar(50) 

set @table_name ='users' 
EXEC('declare @rcnt int;SELECT @rcnt = COUNT(*) FROM '+ @table_name+';select @rcnt ') 
Смежные вопросы