create proc Pro_select_jkd
@djh nvarchar(20 @zdr nvarchar(30)
as
declare @SqlS nvarchar(500)set @SqlS='select * from Wl_Jkd where 1=1'
if @djh!=''
set @SqlS+='and djh='+@djh
if @zdr!=''
set @SqlS+='and zdr='+@zdr
execute(@SqlS)如果执行下面的语句没错
exec Pro_select_jkd '001',''但是执行下面的语句就有错了(条件变成字符型)
exec Pro_select_jkd 'dsd1',''
exec Pro_select_jkd '001','dsfsd'消息 102,级别 15,状态 1,第 1 行
'dsd1' 附近有语法错误。
@djh nvarchar(20 @zdr nvarchar(30)
as
declare @SqlS nvarchar(500)set @SqlS='select * from Wl_Jkd where 1=1'
if @djh!=''
set @SqlS+='and djh='+@djh
if @zdr!=''
set @SqlS+='and zdr='+@zdr
execute(@SqlS)如果执行下面的语句没错
exec Pro_select_jkd '001',''但是执行下面的语句就有错了(条件变成字符型)
exec Pro_select_jkd 'dsd1',''
exec Pro_select_jkd '001','dsfsd'消息 102,级别 15,状态 1,第 1 行
'dsd1' 附近有语法错误。
@djh nvarchar(20),
@zdr nvarchar(30)
as
declare @SqlS nvarchar(500)set @SqlS='select * from Wl_Jkd where 1=1'
if @djh!=''
set @SqlS+=' and djh='''+@djh+''''
if @zdr!=''
set @SqlS+=' and zdr='''+@zdr+''''
execute(@SqlS)
@djh nvarchar(20 ,@zdr nvarchar(30)
as
begin
declare @SqlS nvarchar(500)
set @SqlS='select * from Wl_Jkd where 1=1'
if @djh <> ''
set @SqlS = @SqlS + ' and djh = ''' + @djh + ''''
if @zdr <> ''
set @SqlS = @SqlS + ' and zdr = ''' + @zdr + ''''
execute(@SqlS)
end
@djh nvarchar(20 @zdr nvarchar(30)
as
declare @SqlS nvarchar(500)set @SqlS='select * from Wl_Jkd where 1=1'
if @djh!=''
set @SqlS+='and djh='''+@djh+''''
if @zdr!=''
set @SqlS+='and zdr='''+@zdr+''''
execute(@SqlS)
@djh nvarchar(20),
@zdr nvarchar(30)
as
declare @SqlS nvarchar(500)
set @SqlS='select * from Wl_Jkd where 1=1'if isnull(@djh,'') != ''
set @SqlS+=' and djh='''+@djh+''''
if isnull(@zdr,'') != ''
set @SqlS+=' and zdr='''+@zdr+''''
execute(@SqlS)
GO最好这样
缺少对象或列名,或者对象或列名为空。对于 SELECT INTO 语句,请确保每列均具有名称。对于其他语句,请查找空的别名。不允许使用定义为 "" 或 [] 的别名。请将别名更改为有效名称。
消息 105,级别 15,状态 1,第 1 行
字符串 '' 后的引号不完整。
insert Wl_Jkd select 'dsd1','abcd'
union all select '001','dsfsd'
go
create proc Pro_select_jkd
@djh nvarchar(20),
@zdr nvarchar(30)
as
declare @SqlS nvarchar(500)
set @SqlS='select * from Wl_Jkd where 1=1'if isnull(@djh,'') != ''
set @SqlS+=' and djh='''+@djh+''''
if isnull(@zdr,'') != ''
set @SqlS+=' and zdr='''+@zdr+''''
execute(@SqlS)
GOexec Pro_select_jkd 'dsd1',''
/*
id djh zdr
----------- -------------------- --------------------
1 dsd1 abcd(1 行受影响)
*/
exec Pro_select_jkd '001','dsfsd'
/*
id djh zdr
----------- -------------------- --------------------
2 001 dsfsd(1 行受影响)
*/我测试OK
create table Wl_Jkd(id int identity,djh nvarchar(20),zdr nvarchar(20))
insert Wl_Jkd select 'dsd1','abcd'
union all select '001','dsfsd'
go
create proc Pro_select_jkd
@djh nvarchar(20),
@zdr nvarchar(30)
as
begin
declare @SqlS nvarchar(500)
set @SqlS='select * from Wl_Jkd where 1=1'if isnull(@djh,'') <> ''
set @SqlS = @SqlS + ' and djh='''+@djh+''''
if isnull(@zdr,'') <> ''
set @SqlS = @SqlS + ' and zdr='''+@zdr+''''
execute(@SqlS)
end
GOexec Pro_select_jkd 'dsd1',''
/*
id djh zdr
----------- -------------------- --------------------
1 dsd1 abcd(所影响的行数为 1 行)
*/
exec Pro_select_jkd '001','dsfsd'
/*
id djh zdr
----------- -------------------- --------------------
2 001 dsfsd(所影响的行数为 1 行)*/drop proc Pro_select_jkd
drop table Wl_Jkd
if isnull(@djh,'') != ''
set @SqlS+=' and djh='''+@djh+''''在这呢,那里面我的是双引号,你是两个单引号
if isnull(@zdr,'') != ''
set @SqlS+=' and zdr='''+@zdr+''''
set @SqlS+='and djh='+@djh
if @zdr!=''
set @SqlS+='and zdr='+@zdr
的and 前面最好加空格,虽然select * from Wl_Jkd where 1=1and 2=2可以执行第2
and djh=后面是个字符串,要用''
你这里可以写成''''代表'',因为他是在字符串里。第3create proc Pro_select_jkd
@djh nvarchar(20 @zdr nvarchar(30)
as
declare @SqlS nvarchar(500)set @SqlS='select * from Wl_Jkd where 1=1'
if @djh!=''
set @SqlS+='and djh='+@djh
if @zdr!=''
set @SqlS+='and zdr='+@zdr
print @SqlS
--execute(@SqlS)
GO这样的问题以后别问人了,自己把你执行的SQL语句打印出来,就知道错在哪了,何必问人呢