内部包含单引号是无法识别转换符的,要用动态sql语句的方式拼装起来然后执行如下:--删除原对外账单结付计划主表 set @execsql3='Delete from [nMain]' +'where AccNo in' +'(select AccNo from RiFzAcc ' +'where acctype=''01'' and ' +'AccPeriod in ('+@AccPeriod+') and ' +'TreatyNo='''+@TreatyNo+''' and ' +'OptType=''0'') ' +'and flag=''2''' exec sp_executesql @execsql3;
错了 是这里 报错 insert 是没有问题的 当变量包含单引号 set @strSQL='select count(1) from check_rpt where isbn='''+@isbn +''' and ztm='''+@ztm+''' having count(1)>=1'
是在 组配 sql 查询字符串时 变量 包含单引号 报错
那你赋值前就应该 SET @A='''A' 类似这样
ALTER procedure [dbo].checkrpt @marcid char(32), @isbn varchar(20)='', --isbn @ztm nvarchar(255)='', --题名 @fjh varchar(255)='', @IsRpt int OUTPUTas declare @strSQL nvarchar(4000) set @strSQL='' if (@isbn<>'') and (@ztm<>'') begin if isnull(@fjh,'')='' set @strSQL='select count(1) from check_rpt where isbn='''+@isbn +''' and ztm='''+@ztm+''' having count(1)>=1' else
set @execsql3='Delete from [nMain]'
+'where AccNo in'
+'(select AccNo from RiFzAcc '
+'where acctype=''01'' and '
+'AccPeriod in ('+@AccPeriod+') and '
+'TreatyNo='''+@TreatyNo+''' and '
+'OptType=''0'') '
+'and flag=''2'''
exec sp_executesql @execsql3;
报错
ALTER procedure [dbo].checkrpt
@marcid char(32),
@isbn varchar(20)='', --isbn
@ztm nvarchar(255)='', --题名
@fjh varchar(255)='',
@IsRpt int OUTPUTas declare @strSQL nvarchar(4000)
set @strSQL='' if (@isbn<>'') and (@ztm<>'')
begin
if isnull(@fjh,'')=''
set @strSQL='select count(1) from check_rpt where isbn='''+@isbn +''' and ztm='''+@ztm+''' having count(1)>=1'
else