SQL动态查询
时间:2010-09-20 来源:greg_echo
今天做了一个根据动态生成表明来查询相关结果的存储过程,由于表名是动态生成,因此使用了SQL Server的动态查询,函数sp_executesql。写篇博客已记录开发过程中遇到的问题,以备查询。
需要统计的表是根据规则动态生成,格式如下:
因此在这里考虑使用SQL提供的sp_executesql 函数,它可以执行动态的修改,查询,删除功能。该函数官方详细文档,如下:
Sp_executesql:执行可以多次重复使用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。
语法 :
sp_executesql [ @statement = ] statement
[
{ , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' }
{ , [ @param1 = ] 'value1' [ ,...n ] }
]
官方详细文档:http://technet.microsoft.com/zh-cn/library/ms188001.aspx
完成任务:
在不确定表名的情况下,根据生成表名规则及查询条件,返回统计结果:
要求函数返回值类型为int,取对应字段的值返回
做法如下:
declare @AllCount int
declare @exesql nvarchar(1000);
--动态查询
set @exesql='select @temp = count(*) from [dbo].['+ @tableName +'] where ID='''+@ID +''''
exec sp_executesql @exesql,N'@temp int output', @AllCount output
select @AllCount;
结果:
将统计结果输出到变量@AllCount中。
提醒:
对于动态表名及字段使用非常简单,但获取结果使用动态语句是有一定规则的,如上面的列子,需要把表名声明成Nvarchar的,然后执行动态语句时,声明其动态语句中变量前也要加N ,如N'@a
Output:指示该参数为输出参数。
以上的相关内容就是对SQL server 动态查询的介绍。