to:crazyfor(FAN) 为什么要要这样写? exec('select * from ry_da where 人员编码=+ @is_inside+ '') 有时会什么可以啊,比如说,一但语法检测没有问题的,我复制到新的存储 过程中时没有问题,但重写一样的,就不行,是不是SQLSERVER的 BUG?
问题出在go上面。 @变量 的作用域不能跨"go"比方说: declare @n int set @n = 5 go select @n结果是:错误1378...必须申明变量@n
混了,赞同楼上的:改成这样也没有问题。create proc RY_DA @is_inside char(8) as set nocount on select * from ry_da where 人员编码=@is_inside go
但为什么有二个跨GO了的存储过程,竟然也可以了,这是为什么啊比方说: create proc test @id int as select @id goselect 'ok' go -----------------------------------这个“存储过程”就没有报错。 实际上,第一个go前面的内容才是存储过程的内容,第一个go后面的内容 select 'ok' 并不是存储过程的一部分,而是创建完存储过程后,再单独执行的一条语句。
create proc RY_DA @is_inside char(8) as select * from ry_da where 人员编码=@is_inside go
为什么要要这样写?
exec('select * from ry_da where 人员编码=+ @is_inside+ '')
有时会什么可以啊,比如说,一但语法检测没有问题的,我复制到新的存储
过程中时没有问题,但重写一样的,就不行,是不是SQLSERVER的
BUG?
@变量 的作用域不能跨"go"比方说:
declare @n int
set @n = 5
go
select @n结果是:错误1378...必须申明变量@n
as
set nocount on
select * from ry_da where 人员编码=@is_inside
go
create proc test
@id int
as
select @id
goselect 'ok'
go
-----------------------------------这个“存储过程”就没有报错。
实际上,第一个go前面的内容才是存储过程的内容,第一个go后面的内容
select 'ok'
并不是存储过程的一部分,而是创建完存储过程后,再单独执行的一条语句。
as select * from ry_da where 人员编码=@is_inside
go