2014-11-14 62 views
0

我試圖運行下面的動態SQL語句:返回行計數使用動態SQL

@Tbl,@Fld和@LookupValue已全部按表搜索,字段(或列)設爲搜索和列值進行比較。

DECLARE @Sql AS VARCHAR(500) 
SET @Sql = 'SELECT COUNT(*) 
      FROM ' + @Tbl + 
      ' WITH (NOLOCK) 
      WHERE ' + @Fld + ' = ''' + @LookupValue + '''' 

EXEC(@Sql) 

我想將結果存儲到一個變量,所以我可以檢查是否有任何返回的行。該語句位於正在檢查多個表和字段的WHILE構造中。

如果找到了記錄,那麼我想顯示:

SET @Sql = 'SELECT ' + @Fld + 
      ' FROM ' + @Tbl + 
      ' WITH (NOLOCK) 
      WHERE ' + @Fld + ' = ''' + @LookupValue + '''' 

EXEC(@Sql) 
+0

你需要使用臨時表來存儲計數值 – radar 2014-11-14 18:50:44

+0

@RADAR,已經是SQL Server的,因爲有MySQL中沒有'NOLOCK'表提示。 – Rahul 2014-11-14 18:51:52

+0

@Rahul,你是對的。 – radar 2014-11-14 18:54:55

回答

0

您可以創建臨時表和存儲的計數值。

if object_id('tempdb.#mycount') is null 
create table #mycount (countVal int); 

DECLARE @Sql AS VARCHAR(500) 
SET @Sql = 'INSERT INTO #mycount 
      SELECT COUNT(*) 
      FROM ' + @Tbl + 
      ' WITH (NOLOCK) 
      WHERE ' + @Fld + ' = ''' + @LookupValue + '''' 

EXEC(@Sql) 

select countVal from #mycount 


-- once the temp table usage is done, you can delete it 
drop table #mycount 
1

是的,你可以將其存儲在一個類型的變量,並使用sp_executesql

DECLARE @Sql AS NVARCHAR(500); 
DECLARE @cnt INT; 

SET @Sql = 'SELECT @cnt = COUNT(*) 
      FROM ' + @Tbl + 
      ' WITH (NOLOCK) 
      WHERE ' + @Fld + ' = ''' + @LookupValue + ''''; 

EXEC sp_executesql @Sql, N'@var INT OUTPUT', @var OUTPUT; 

SELECT @var;