那位大仙给我解释下这sql语句

来源:百度知道 编辑:UC知道 时间:2024/05/02 19:05:41
以下是一个存储过程中的某一段代码
先别管他的 数据库结构 跟一些@变量
就看他的语句 语法 很不明白
尤其是他的 单引号 用法
如(select '''+@pp2+''',''1期初库存'')为什么用这么多单引号

代码如下:
set @sql='insert into #t1(fdw,flb,'+@p2+'大包,fhj) select '''+@pp2+''',''1期初库存'',isnull(sum(fbegqty),0),isnull(sum(fbegqty),0) from ICInvbal a
inner join t_auxitem c on c.fitemid=a.fauxpropid
where a.fitemid='+cast(@p1 as varchar(15))+' and
fyear='+cast(@y as varchar(4))+' and fperiod='+cast(@m as varchar(2))+'
and left(a.fbatchno,1)=left('''+@pp2+''',1) and c.fitemclassid=3001 and c.fnumber not in(''001'',''101'',''201'')'
exec(@sql)

没什么,这就是把一群字符串连接成一个sql语句,然后付给@sql,用exec来执行。
引号多是为了配对,以被sql识别。
比如我要让@sql里的sql语句是这个select * from t where t1='x'
那么语句就必须这么写
set @sql='select * from t where t1=''x'''--正确写法
反之
set @sql='select * from t where t1='x''--错误写法
因为这时候前两个引号配对,后两个引号配对,中间的x没有被当成字符串,而是当成关键字或字段访问,就会出现语法错误,楼主可以试试。

转义用法

因为字段里需要插入的数据是 '001'这种,所以需要用''来转义一个'号

太长,懒得看。自己搞定

两个单引号在查询分析器里当一个单引号处理。所以单引号多