读书人

存储过程 必须声明变量的有关问题

发布时间: 2012-01-20 18:53:53 作者: rapoo

存储过程 必须声明变量的问题
(1)
create procedure dl @a varchar(6) as

insert into tb (……) select (……) from tb1 where f1=@a
GO

……
提示:必须声明变量@a

(2)
修改为:
create procedure dl @a varchar(6) as

declare @sql varchar(1000)
set @sql= 'insert into tb (……) select (……) from tb1 where f1= '+@a
exec(@sql)
GO

……
还是提示:必须声明变量@a

大家多多指教 我第一次编存储过程

[解决办法]
(1)
create procedure dl @a varchar(6) as

exec( 'insert into tb (……) select (……) from tb1 where f1= ' ' '+@a+ ' ' ' ')
GO

……

[解决办法]
Create Table tb(f1 varchar(6), f2 varchar(6))
Create Table tb1(f1 varchar(6), f2 varchar(6))
Insert tb1 Select 'a ', 'b '
GO
--(1)
create procedure dl @a varchar(6) as
insert into tb (f1, f2) select f1, f2 from tb1 where f1=@a
GO
EXEC dl 'a '

Select * From tb
--Result
/*
f1f2
ab
*/
[解决办法]
create procedure dl @a varchar(6) as

select * from b where b=@a

GO

exec dl 'a '

drop proc dl

/*


命令已成功完成。


*/
[解决办法]
(1)
create procedure dl @a varchar(6) as

insert into tb (……) select (……) from tb1 where f1=@a


这条似乎没有问题

[解决办法]
go都要去
[解决办法]

你的问题出在这里
if exists (select * from dbo.sysobjects where id=object_id(N 'tb ') and OBJECTPROPERTY(id,N 'IsUserTable ')=1)
drop table tb
GO

应该这里有GO
所以编译器认为你的存储过程玩了
接着执行下面的语句当然就出错了

改一下:
CREATE PROCEDURE dl @a varchar(6) AS

if exists (select * from dbo.sysobjects where id=object_id(N 'tb ') and OBJECTPROPERTY(id,N 'IsUserTable ')=1)
drop table tb

CREATE TABLE tb (
……
) ON [PRIMARY]

declare @sql varchar(1000)
set @sql= 'INSERT INTO tb (……) SELECT …… FROM tb1 WHERE f1= ' ' '+@a+ ' ' ' '
exec(@sql)
GO

读书人网 >SQL Server

热点推荐