sql 存储过程语句编写 20
CREATEprocedureProc_gettwb_lxs@StartTimevarchar(200),--申明的时间变量1@EndTimevarchar(200),-...
CREATE procedure Proc_gettwb_lxs
@StartTime varchar(200),--申明的时间变量1
@EndTime varchar(200),--声明的时间变量2
@Tblwhere varchar(200)--申明的条件变量 (当做where后面的) 如: a=a或 id=??
AS
BEGIN
DECLARE @TMP TABLE(
a int ,
b varchar(50),
c varchar(50),
d varchar(50),
e varchar(50),
)
insert into @TMP
select a.a,b.ss,c.dd,d.nn (总之很多 ) from 表一 as A ,表二 as B , 表三 as C , 表四 as D where CONVERT(NVARCHAR(10), A.TPAY_DATE ,121)>@StartTime , CONVERT(NVARCHAR(10), A.TPAY_DATE ,121)<@EndTime and A.ID=B.ID AND B.ss=C.ss AND C.mm=D.mm And @Tblwhere
group by a.a,b.ss,c.dd,d.nn (总之ye很多 )
我让 @Tblwhere 与上面SQL进行了拼接 但是 两个时间变量 和临时表@TMP都需要声明 ,请问我如何让@Tblwhere 成为查询的SQL语句条件 而对前面无影响 目的是接收三个值 在含有 GROUP BY 的语句中加 where 条件 (条件为接收的值), 然后将SQL存入临时表中 成立存储 (没有实现的不要乱说 ,我试了很多遍的) 展开
@StartTime varchar(200),--申明的时间变量1
@EndTime varchar(200),--声明的时间变量2
@Tblwhere varchar(200)--申明的条件变量 (当做where后面的) 如: a=a或 id=??
AS
BEGIN
DECLARE @TMP TABLE(
a int ,
b varchar(50),
c varchar(50),
d varchar(50),
e varchar(50),
)
insert into @TMP
select a.a,b.ss,c.dd,d.nn (总之很多 ) from 表一 as A ,表二 as B , 表三 as C , 表四 as D where CONVERT(NVARCHAR(10), A.TPAY_DATE ,121)>@StartTime , CONVERT(NVARCHAR(10), A.TPAY_DATE ,121)<@EndTime and A.ID=B.ID AND B.ss=C.ss AND C.mm=D.mm And @Tblwhere
group by a.a,b.ss,c.dd,d.nn (总之ye很多 )
我让 @Tblwhere 与上面SQL进行了拼接 但是 两个时间变量 和临时表@TMP都需要声明 ,请问我如何让@Tblwhere 成为查询的SQL语句条件 而对前面无影响 目的是接收三个值 在含有 GROUP BY 的语句中加 where 条件 (条件为接收的值), 然后将SQL存入临时表中 成立存储 (没有实现的不要乱说 ,我试了很多遍的) 展开
展开全部
要到达你的要求,在存储过程中必须使用动态SQL语句。
一个简化的例子:
create procedure MyDynamicSQL
@tblwhere nvarchar(200) -- a==a or a==xxx
as
begin
declare @sql nvarchar(max)
-- 动态拼接sql语句
set @sql = N'select * from [表一] where ' + @tblwhere
--执行
execute sp_executesql @sql
end
展开全部
按照你写的存储过程,@Tblwhere是属于存储过程的参数,那么这个参数就是需要在调用存储过程的时候,传值,在@Tblwhere有值之后,可以直接放到sql中作为条件用,这种还算不上sql拼接,只是简单的变量的运用,sql拼接如:
declare @sql varchar(max)
declare @sql2 + varchar(max)
declare @a int
set @sql = 'select * from sysobjects' + @sql2 + 'where id = ' + @a
exec(@sql)
declare @sql varchar(max)
declare @sql2 + varchar(max)
declare @a int
set @sql = 'select * from sysobjects' + @sql2 + 'where id = ' + @a
exec(@sql)
更多追问追答
追问
我如何让@Tblwhere 成为查询的SQL语句条件 而对前面无影响 目的是接收三个值 在含有 GROUP BY 的语句中加 where 条件 (条件为接收的值), 然后将SQL存入临时表中 成立存储
追答
不明白你说的什么意思,你上面不是都有变量在语句中的语法吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |