Возвращаемое значение из exec (@sql)
Я хочу получить значение от Exec(@sql)
и назначить @Rowcount(int)
Вот мой запрос:
'SET @RowCount = (select count(*)
FROM dbo.Comm_Services
WHERE CompanyId = '+cast(@CompanyId as char)+' and '[email protected]+')'
Ответы
Ответ 1
С одной стороны, вы можете использовать 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);
Ответ 2
что моя процедура
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 = '[email protected]+' and '[email protected]+')'
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
Ответ 3
Играла с этим сегодня... Я верю, что вы также можете использовать @@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 *)
Надеюсь, что это поможет.
Ответ 4
объявить @nReturn int = 0
EXEC @nReturn = Хранимые процедуры
Ответ 5
Если я правильно вас понимаю (я, вероятно, не знаю)
'SELECT @RowCount = COUNT(*)
FROM dbo.Comm_Services
WHERE CompanyId = ' + CAST(@CompanyId AS CHAR) + '
AND ' + @condition