CREATE procedure [dbo].checkrpt
@marcid char(32),
@isbn varchar(20), --isbn
@ztm nvarchar(255), --题名
@fjh varchar(255),
@IsRpt int OUTPUTas declare @strSQL nvarchar(4000)
if (@isbn<>'') and (@ztm<>'')
begin
if (@fjh='') or (@fjh=null)
set @strSQL='select * from check_rpt where isbn='+@isbn +' and title='+@ztm
else
set @strSQL='select * from check_rpt where isbn='+@isbn +' and ztm='+@ztm +' and f2='+@fjh
print @strSQL
exec(@strSQL)
if @@rowcount =0 --如果表中不存在记录 则写入表
begin
--写入表
set @strSQL='insert into check_rpt (marcid,isbn,ztm,f2) values('+@marcid+','+@isbn+','+@ztm+','+@fjh+')'
exec(@strSQL)
return 0
end
else
return 1
end
print @strSQL 变为null了
这个 实现简单功能 查重一个表 如果不存在记录则insert 否则返回 1 说明已经有记录了 存储过程写的少 我快笨死了
CREATE 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 (@fjh='') or (@fjh=null)
set @strSQL='select * from check_rpt where isbn='+@isbn +' and title='+@ztm
else
set @strSQL='select * from check_rpt where isbn='+@isbn +' and ztm='+@ztm +' and f2='+@fjh
print @strSQL
exec(@strSQL)
if @@rowcount =0 --如果表中不存在记录 则写入表
begin
--写入表
set @strSQL='insert into check_rpt (marcid,isbn,ztm,f2) values('+@marcid+','+@isbn+','+@ztm+','+@fjh+')'
exec(@strSQL)
return 0
end
else
return 1
end
@marcid char(32),
@isbn varchar(20), --isbn
@ztm nvarchar(255), --题名
@fjh varchar(255),
@IsRpt int OUTPUTas declare @strSQL nvarchar(4000)
if (@isbn<>'') and (@ztm<>'')
begin
if isnull(@fjh,'')=''
set @strSQL='select * from check_rpt where isbn='+@isbn +' and title='+@ztm
else
set @strSQL='select * from check_rpt where isbn='+@isbn +' and ztm='+@ztm +' and f2='+@fjh
print @strSQL
exec(@strSQL)
if @@rowcount =0 --如果表中不存在记录 则写入表
begin
--写入表
set @strSQL='insert into check_rpt (marcid,isbn,ztm,f2) values('+@marcid+','+@isbn+','+@ztm+','+@fjh+')'
exec(@strSQL)
set @IsRpt=0
end
else
set @IsRpt=1 end
CREATE 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 (@fjh='') or (@fjh=null)
select @strSQL=@strSQL+'select * from check_rpt where isbn='+@isbn +' and title='+@ztm
else
select @strSQL=@strSQL+'select * from check_rpt where isbn='+@isbn +' and ztm='+@ztm +' and f2='+@fjh
print @strSQL
exec(@strSQL)
if @@rowcount =0 --如果表中不存在记录 则写入表
begin
--写入表
select @strSQL=@strSQL+'insert into check_rpt (marcid,isbn,ztm,f2) values('+@marcid+','+@isbn+','+@ztm+','+@fjh+')'
exec(@strSQL)
return 0
end
else
return 1
end
原来是这样呀 另外 我想利用 if not exists (@strSQL) 判断 这么写怎么不对 而这么写就对 if not exists (select xx from ....) 我的sql 是变量
CREATE procedure [dbo].checkrpt
@marcid char(32),
@isbn varchar(20), --isbn
@ztm nvarchar(255), --题名
@fjh varchar(255),
@IsRpt int OUTPUTas
declare @strSQL nvarchar(4000)
if (@isbn<>'') and (@ztm<>'')
begin
if (@fjh='') or (@fjh is null)
set @strSQL='select * from check_rpt where isbn='+isnull(@isbn,'''''') +' and title='+isnull(@ztm,'''''')
else
set @strSQL='select * from check_rpt where isbn='+isnull(@isbn,'''''') +' and ztm='+isnull(@ztm,'''''') +' and f2='+isnull(@fjh,'''''')
print @strSQL
exec(@strSQL)
if @@rowcount =0 --如果表中不存在记录 则写入表
begin
--写入表
set @strSQL='insert into check_rpt (marcid,isbn,ztm,f2) values('+isnull(@marcid,'''''')+','+isnull(@isbn,'''''')+','+isnull(@ztm,'''''')+','+isnull(@fjh,'''''')+')'
exec(@strSQL)
return 0
end
else
return 1
end
解决此问题 即可结贴
这是啥意思吗 我的 sql 要加 where 条件的
CREATE procedure [dbo].checkrpt
@marcid char(32),
@isbn varchar(20), --isbn
@ztm nvarchar(255), --题名
@fjh varchar(255),
@IsRpt int OUTPUTas
IF EXISTS(SELECT 1 FROM check_rpt WHERE isbn=@isbn AND title=@ztm AND f2=ISNULL(@fjh,f2))
RETURN 0
--写入表
insert into check_rpt (marcid,isbn,ztm,f2) values(@marcid,@isbn,@ztm,@fjh)
RETURN 1
不存在新增 return 1不需要用動態貼出來的語句也有問題@marcid char(32),
@isbn varchar(20), --isbn
@ztm nvarchar(255), --题名
@fjh varchar(255),字符串加時要在兩邊加引號
set @strSQL='select * from check_rpt where isbn='''+@isbn +''' and title='''+@ztm+''''
目前我这样 判断 较之前的 效率会不会高些 if isnull(@fjh,'')=''
set @strSQL='select count(1) from check_rpt where isbn='''+@isbn +''' and ztm='''+@ztm+''' having count(*)>=1'
else
set @strSQL='select count(1) from check_rpt where isbn='''+@isbn +''' and ztm='''+@ztm +''' and f2='''+@fjh+''''
--print @strSQL
exec(@strSQL)
if @@rowcount =0 --如果表中不存在记录 则写入表