create proc RY_DA @is_inside char(8)
    as
   set nocount on  
    exec('select * from ry_da where 人员编码=+ @is_inside+ '')
    go

解决方案 »

  1.   

    to:crazyfor(FAN)
        为什么要要这样写?
        exec('select * from ry_da where 人员编码=+ @is_inside+ '')
        有时会什么可以啊,比如说,一但语法检测没有问题的,我复制到新的存储
        过程中时没有问题,但重写一样的,就不行,是不是SQLSERVER的
        BUG?
      

  2.   

    问题出在go上面。
    @变量 的作用域不能跨"go"比方说:
    declare @n int
    set @n = 5
    go
    select @n结果是:错误1378...必须申明变量@n
      

  3.   

    混了,赞同楼上的:改成这样也没有问题。create proc RY_DA @is_inside char(8)
        as
        set nocount on 
        select * from ry_da where 人员编码=@is_inside
        go
      

  4.   

    但为什么有二个跨GO了的存储过程,竟然也可以了,这是为什么啊比方说:
    create proc test 
    @id int
    as
    select @id
    goselect 'ok'
    go
    -----------------------------------这个“存储过程”就没有报错。
    实际上,第一个go前面的内容才是存储过程的内容,第一个go后面的内容
    select 'ok'
    并不是存储过程的一部分,而是创建完存储过程后,再单独执行的一条语句。
      

  5.   

    create proc RY_DA @is_inside char(8)
        as    select * from ry_da where 人员编码=@is_inside
        go