我有一个存储过程'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
答案 0 :(得分:1)
我不知道你可以用存储过程做到这一点,但是:
a)如果插入始终相同,您可以将其放入存储过程中,因此它采用
形式INSERT INTO Table1
(Company, Store, POS)
[current select statement from proc]
然后只是
exec inserttable(Company1,1)
exec inserttable(Company2,2)
b)用一个返回表并使用union
的函数替换proccreate 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)