set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
gocreate PROCEDURE [dbo].[Proc_GetMaeesage]
(
@id nvarchar(50)=null,
    @restoers nvarchar(50)=null
)
AS
 declare @sql varchar(200)set @sql='select * from restor where 1=1 '
if(@restoers is not null)
   set @sql=@sql + ' and restoer= ' + @restoersif(@id is not null)
   set @sql=@sql + '  and restorid= ' +  @id exec(@sql)这是一个参数可有可无的存储过程,编译通过,exec [dbo].[Proc_GetMaeesage] @id=1  我写这一句话没有什么问题,可以查询出数据,exec Proc_GetMaeesage @restoers='swd'我写这一句话的时候,就报错了,错误是这样的:消息 207,级别 16,状态 1,第 1 行
列名 'swd' 无效。各位高手帮忙解决下,

解决方案 »

  1.   

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    create PROCEDURE [dbo].[Proc_GetMaeesage]
    (
    @id nvarchar(50)=null,
        @restoers nvarchar(50)=null
    )
    AS
    declare @sql varchar(200)set @sql='select * from restor where 1=1 '
    if(@restoers is not null)
      set @sql=@sql + ' and restoer= ''' + @restoers+''''if(@id is not null)
      set @sql=@sql + '  and restorid= ' +  @idexec(@sql) 
      

  2.   

    这种连接sql字符串的存储过程的执行效率不高
      

  3.   

    create PROCEDURE [dbo].[Proc_GetMaeesage] 

    @id nvarchar(50)=null, 
        @restoers nvarchar(50)=null 

    AS 
    declare @sql varchar(200) set @sql='select * from restor where 1=1 ' 
    if(@restoers is not null) 
      set @sql=@sql + ' and restoer= ''' + @restoers +'''if(@id is not null) 
      set @sql=@sql + '  and restorid= ' +  @id exec(@sql) GO--说明:@restoers 是字符型的,需要用''' '''括起来才能被exec识别
      

  4.   

    create PROCEDURE [dbo].[Proc_GetMaeesage] 

    @id nvarchar(50)=null, 
        @restoers nvarchar(50)=null 

    AS 
    declare @sql varchar(200) set @sql='select * from restor where 1=1 ' 
    if(@restoers is not null) 
      set @sql=@sql + ' and restoer= ''' + @restoers +''''if(@id is not null) 
      set @sql=@sql + '  and restorid= ' +  @id exec(@sql) GO刚才少打了一个'
      

  5.   

    .NET联盟会馆 QQ群号:77329563   招聘中.....