(1)
create procedure dl @a varchar(6) asexec('insert into tb (……) select (……) from tb1 where f1= '''+@a+'''')
GO……
create procedure dl @a varchar(6) asexec('insert into tb (……) select (……) from tb1 where f1= '''+@a+'''')
GO……
set @sql='insert into tb (……) select (……) from tb1 where f1='''+@a+''''
exec(@sql)
GO
drop proc dl/*
命令已成功完成。
*/
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 Table tb1(f1 varchar(6), f2 varchar(6))
Insert tb1 Select 'a', 'b'
GO
--(2)
create procedure dl @a varchar(6) asdeclare @sql varchar(1000)
set @sql='insert into tb (f1, f2) select f1, f2 from tb1 where f1='''+@a + ''''
exec(@sql)
GO
EXEC dl 'a'Select * From tb
--Result
/*
f1 f2
a b
*/
命令已成功完成。
*/
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
是不是测试时,只运行了这个??
……*********/
create procedure dl @a varchar(6) asinsert into tb (……) select (……) from tb1 where f1=@a
这条似乎没有问题
我试了一下 还是出那个错
---------
你測試這段完整的代碼看看。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
GO
Delete From tb
Drop procedure dl
GO--(2)
create procedure dl @a varchar(6) asdeclare @sql varchar(1000)
set @sql='insert into tb (f1, f2) select f1, f2 from tb1 where f1='''+@a + ''''
exec(@sql)
GO
EXEC dl 'a'Select * From tb
GO
Drop Table tb, tb1
Drop procedure dl
--Result
/*
f1 f2
a b
*/
Create procedure dl @a varchar(6) asdeclare @sql varchar(1000)
set @sql='insert into tb (……) select (……) from tb1 where f1='+@a
exec(@sql)
GO
----------------------------------------------------------------------
修改这条:
set @sql='insert into tb (……) select (……) from tb1 where f1='''+@a +''''原因:由于是字符型,所以要增加引号
CREATE PROCEDURE dl @a varchar(6) ASif exists (select * from dbo.sysobjects where id=object_id(N'tb') and OBJECTPROPERTY(id,N'IsUserTable')=1)
drop table tb
GOCREATE TABLE tb (
……
) ON [PRIMARY]
GOdeclare @sql varchar(1000)
set @sql='INSERT INTO tb (……) SELECT …… FROM tb1 WHERE f1='''+@a+''''
exec(@sql)
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) ASif 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