Возвращаемое значение из exec (@sql) - PullRequest
45 голосов
/ 09 ноября 2010

Я хочу получить значение из Exec(@sql) и присвоить @Rowcount(int)

Вот мой запрос:

'SET @RowCount = (select count(*) 
                    FROM dbo.Comm_Services 
                   WHERE CompanyId = '+cast(@CompanyId as char)+' and '+@condition+')'

Ответы [ 5 ]

83 голосов
/ 09 ноября 2010

С одной стороны, вы можете использовать sp_executesql:

exec sp_executesql N'select @rowcount=count(*) from anytable', 
                    N'@rowcount int output', @rowcount output;

С другой стороны, вы можете использовать временную таблицу:

declare @result table (rowcount int);
insert into @result (rowcount)
exec (N'select count(*) from anytable');
declare @rowcount int = (select top (1) rowcount from @result);
0 голосов
/ 12 августа 2015

Declare @nReturn int = 0 EXEC @nReturn = Хранимые процедуры

0 голосов
/ 03 февраля 2012

Играл с этим сегодня ... Я полагаю, вы также можете использовать @@ ROWCOUNT, например:

DECLARE @SQL VARCHAR(50)
DECLARE @Rowcount INT
SET @SQL = 'SELECT 1 UNION SELECT 2'
EXEC(@SQL)
SET @Rowcount = @@ROWCOUNT
SELECT @Rowcount

Затем замените 'SELECT 1 UNION SELECT 2' на ваш фактический выбор без подсчета,Я бы посоветовал просто поставить 1 в свой выбор, например:

SELECT 1
FROM dbo.Comm_Services
WHERE....
....

(в отличие от ввода SELECT *)

Надеюсь, это поможет.

0 голосов
/ 09 ноября 2010

это моя процедура

CREATE PROC sp_count
    @CompanyId sysname,
    @codition sysname
    AS
    SET NOCOUNT ON
    CREATE TABLE #ctr
    ( NumRows int )

    DECLARE @intCount int
         , @vcSQL varchar(255)

    SELECT    @vcSQL = ' INSERT #ctr FROM dbo.Comm_Services 
                       WHERE CompanyId = '+@CompanyId+' and '+@condition+')'
    EXEC      (@vcSQL)

    IF @@ERROR = 0
    BEGIN
         SELECT    @intCount = NumRows
         FROM #ctr

         DROP TABLE #ctr
         RETURN @intCount
    END
    ELSE
    BEGIN
         DROP TABLE #ctr
         RETURN -1
    END
    GO
0 голосов
/ 09 ноября 2010

Если я вас правильно понимаю, (возможно, нет)

'SELECT @RowCount = COUNT(*)
                   FROM dbo.Comm_Services
                   WHERE CompanyId = ' + CAST(@CompanyId AS CHAR) + '
                   AND ' + @condition
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...