计数动态构建查询到变量的记录数

Co.*_*den 0 sql dynamic runtime.exec sql-server-2008-r2

我正在构建一个查询,其中选择的列数不固定,所以我生成我的查询运行时并在存储过程中执行它.但我现在卡住了,因为我想根据记录的数量从我的查询中执行一些操作,但我不知道如何从动态查询中获取记录数量的计数,其中我的查询就像

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  = ????..
Run Code Online (Sandbox Code Playgroud)

你能告诉我如何从dynaimc查询得到记录数

Mud*_*san 5

除非WHERE子句中提供了某些条件,否则记录数的计数与SELECT列表中的列无关.

就这样做吧

DECLARE @SQL AS VARCHAR(MAX)
Set @SQL ='Select COUNT(*) From Table1'
Exec(@SQL)
Run Code Online (Sandbox Code Playgroud)

因此,如果要存储返回的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 
Run Code Online (Sandbox Code Playgroud)

您还可以使用OUTPUT变量检索值

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, @retvalOUT=@retCount OUTPUT;

SELECT @retCount;
Run Code Online (Sandbox Code Playgroud)