使用动态SQL返回行计数

时间:2014-11-14 18:36:27

标签: 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)

2 个答案:

答案 0 :(得分:2)

是的,您可以将其存储在类型变量中并使用{/ 1}}之类的

sp_executesql

答案 1 :(得分: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