动态SQL语句的拼接实现
平常经常遇到一些语句需要使用动态语句,来实现作业任务的计划执行。例如动态表名,在分表设计时使用了月份格式(A_12)
在实现此类格式表名的作业任务时,必须采用动态语句,以避免每月更换一次SQL语句的尴尬。现将部分实际操作经验总结如下:
一、基本语句格式:定义变量,给变量赋值,使用变量拼接SQL,语句输出
二、小技巧:通过print打印查看自己拼接的语句是否正确,以及错误在哪里,待正确时再用exec运行输出
三、难点,动态SQL的拼接的难点是需要解决引号的应用问题,也就是where条件的拼接
只要明白以下四个小语句显示出来的效果,动态SQL的拼接就比较简单了,直白的讲,就是用变量替换掉SQL执行时的where=’???‘语句里的’???'条件,遇到字符串条件或有字符串的函数就替换成变量,就OK了。
---下图中的所有'均为单引号declare @sq nvarchar(50),@sq2 nvarchar(50),@sq3 nvarchar(50),@sq4 nvarchar(50),@nddate nvarchar(50)set @sq='''' set @sq2=''''''set @sq3='''张三'''set @ndate=replace('-12','-','')print @sq print @sq2print @sq3print @ndate如上代码结果分别为(1) '(2) ''(3) '张三'(4) 12 --字符串--完整实例如下declare @sql varchar(100),@ndate varchar(6),@condition varchar(20)set @condition='''文件'''set @ndate=replace('-12','-','')set @sql='select * from A_'+@ndate+' where dir='+@conditionprint(@sql)--最终拼接得到的SQL语句如下select * from A_12 where dir='文件'