日期:2014-05-18  浏览次数:20376 次

存储过程中SQL语句拼接问题
存储过程中

这样写:
insert into 临时表 select * from(
select * from 表 where name='A' and convert(datetime,B.F_LWRQ)>dateadd(d,-8,getdate()) and……
)
可以查询出结果

这样写
declare @sQuery nvarchar(4000)
set @sQuery='and convert(datetime,B.F_LWRQ)>dateadd(d,-8,getdate())'

insert into 临时表 select * from(
select * from 表 where name='A' + @sQuery and……
)
就查询不出来结果了

本人菜鸟,请问各位这应该怎么拼接, 谢谢了!

------解决方案--------------------
select * from 表 where name='A' & @sQuery
试试
------解决方案--------------------
declare @sQuery nvarchar(4000)
set @sQuery='and convert(datetime,B.F_LWRQ)>dateadd(d,-8,getdate())'

insert into 临时表 select * from(
select * from 表 where name='A' + @sQuery and……
)

来看下这个语句

1、变量@sQuery是个条件的字符串拼接,也就是说要动态去执行,而楼主的是普通的SQL语句,肯定是不成功的;

2、即便没有这个变量,insert into 表 select * from (子查询) t 注意这里的t,一定要加个名称。
------解决方案--------------------
探讨

如果你需要将条件作为一个变量传进去,那么整个插入语句就用变量,然后动态执行。

例如,可能有地方需要楼主改动些。

SQL code

declare @sQuery nvarchar(4000)
declare @sql nvarchar(4000)
set @sQuery='and convert(datetime,B.F_LWRQ)>dateadd(d,-8,getdate())……