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存入临时表中 成立存储 (没有实现的不要乱说 ,我试了很多遍的)
展开
 我来答
freeeeeewind
2014-04-20 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1314万
展开全部

要到达你的要求,在存储过程中必须使用动态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
发生等将发生
2014-04-19 · TA获得超过478个赞
知道小有建树答主
回答量:653
采纳率:75%
帮助的人:322万
展开全部
按照你写的存储过程,@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)
更多追问追答
追问
我如何让@Tblwhere 成为查询的SQL语句条件  而对前面无影响 目的是接收三个值 在含有 GROUP BY 的语句中加 where 条件 (条件为接收的值), 然后将SQL存入临时表中 成立存储
追答
不明白你说的什么意思,你上面不是都有变量在语句中的语法吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式