SQL插入多个存储过程,没有多个插入

时间:2013-04-23 10:05:42

标签: sql tsql stored-procedures sql-server-2008-r2 sql-insert

我有一个存储过程'inserttable',用于从数据库中选择信息,其中'@TableName'根据公司名称(Company1,Company2)而变化,'@ CompanyNo'是标识号(1,2)。

我的插入内容:

TRUNCATE TABLE Table1
INSERT INTO Table1
(Company, Store, POS, StoreNo)
exec inserttable(Company1,1)
exec inserttable(Company2,2)

我的问题是,是否可以插入多个存储过程exec?

我的示例仅插入第一个exec,然后显示第二个。

这不需要添加另一个插入!

编辑:

我的存储过程:

CREATE PROCEDURE [dbo].[inserttable] 
     @TableName varchar(300),
     @StoreNo varchar(100)
AS
BEGIN
declare @q varchar(1000)
set @q = 'SELECT Company, Store, POS,'+@StoreNo+'
      FROM '+@TableName
exec (@q)
END
GO

编辑2:

我的存储过程:

CREATE PROCEDURE [dbo].[inserttable] 
     @TableName varchar(300),
     @StoreNo varchar(100)
AS
BEGIN
declare @q varchar(1000)
set @q = 'INSERT INTO TABLE Table1 (SELECT Company, Store, POS,'+@StoreNo+'
      FROM '+@TableName+')'
exec (@q)
END
GO

运行exec应该执行trix

1 个答案:

答案 0 :(得分:1)

我不知道你可以用存储过程做到这一点,但是:

a)如果插入始终相同,您可以将其放入存储过程中,因此它采用

形式
INSERT INTO Table1
(Company, Store, POS)
[current select statement from proc]

然后只是

exec inserttable(Company1,1)
exec inserttable(Company2,2)

b)用一个返回表并​​使用union

的函数替换proc
create function companydata( @name varchar(50), @number integer) 
returns table
return select @name company, @number store, 1 pos

显然用你现有的sp做的替换select,然后你可以使用union

运行
INSERT INTO Table1(Company, Store, POS)
select * from companydata('co no 1', 1)
union all 
select * from companydata('co no 2',2)