2013-12-13 2 views
0

Я создаю запрос, в котором количество выбранных столбцов не исправлено, поэтому я генерирую время выполнения запроса и выполняю его в хранимой процедуре. Но я застрял теперь, потому что я хочу, чтобы выполнить какую-то операцию из моего запроса в соответствии с количеством записей, но я не знаю, как получить подсчет количества записей из динамического запроса, где мой запрос какCount Количество записей запроса динамической сборки в переменную

DECLARE @RowCount AS numeric(18,0) 
DECLARE @SQL AS VARCHAR(MAX) 
Set @SQL ='Select Count(*) From ((Select Col1,Col2,Col3,Col4 From Table1)) as rowcount' 
Exec(@SQL) 
Set @RowCount = ????.. 

Не могли бы вы рассказать мне, как я получил счетчик записей из запроса dynaimc?

+1

Вы имеете в виду - получите количество столбцов? –

+0

нет Я имею в виду подсчет числа строк –

+0

Почему бы вам не выбрать счетчик в своем запросе? –

ответ

4

Количество записей не зависит от столбцов в списке SELECT, если в условии WHERE не указано какое-либо условие.

Просто сделай это

DECLARE @SQL AS VARCHAR(MAX) 
Set @SQL ='Select COUNT(*) From Table1' 
Exec(@SQL) 

Так что если вы хотите сохранить ROWCOUNT значение, возвращенное использовать переменную таблицы и вставить в нее

DECLARE @SQL AS VARCHAR(MAX) 
    DECLARE @rowCountTable TABLE(row_count INT) 

    Set @SQL ='Select COUNT(*) From Table1' 

    INSERT INTO @rowCountTable 
    Exec(@SQL) 


    SELECT * FROM @rowCountTable 

Вы также можете получить значение с помощью выходной переменной

DECLARE @retCount int 
DECLARE @SQL AS NVARCHAR(MAX) 
DECLARE @outPut NVARCHAR(50); 


SET @SQL = N'Select @retvalOUT=COUNT(*) From Table1' 
SET @outPut = N'@retvalOUT int OUTPUT'; 

EXEC sp_executesql @SQL, @outPut, @[email protected] OUTPUT; 

SELECT @retCount; 
+0

Я сделал правку на мой вопрос –