-2

我有一个存储过程“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

4

1 回答 1

1

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

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

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

那么就

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

b)用返回表并使用联合的函数替换proc

create function companydata( @name varchar(50), @number integer) 
returns table
return select @name company, @number store, 1 pos

显然用您现有的 sp 所做的任何替换选择,然后您可以使用联合运行

INSERT INTO Table1(Company, Store, POS)
select * from companydata('co no 1', 1)
union all 
select * from companydata('co no 2',2)
于 2013-04-23T10:36:17.867 回答