存储过程 必须声明变量的问题
(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
/*
f1 f2
a b
*/
------解决方案--------------------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