从exec(@sql)返回值
我想从Exec(@sql)
获取值并赋值给@Rowcount(int)
这是我的查询:
'SET @RowCount = (select count(*) FROM dbo.Comm_Services WHERE CompanyId = '+cast(@CompanyId as char)+' and '+@condition+')'
一方面你可以使用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);
如果我理解正确,(我可能不)
'SELECT @RowCount = COUNT(*) FROM dbo.Comm_Services WHERE CompanyId = ' + CAST(@CompanyId AS CHAR) + ' AND ' + @condition
这是我的程序
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
今天正在玩这个…我相信你也可以使用@@ ROWCOUNT,就像这样:
DECLARE @SQL VARCHAR(50) DECLARE @Rowcount INT SET @SQL = 'SELECT 1 UNION SELECT 2' EXEC(@SQL) SET @Rowcount = @@ROWCOUNT SELECT @Rowcount
然后用你的实际selectreplace“SELECT 1 UNION SELECT 2”而不计数。 我build议在你的select中join1,就像这样:
SELECT 1 FROM dbo.Comm_Services WHERE.... ....
(而不是把SELECT *)
希望有所帮助。
声明@nReturn int = 0 EXEC @nReturn =存储过程