SELECT * INTO #Temp FROM sp... PARAM1, PARAM2
Error : cannot use insert exec or cannot nested etc..
我想用参数执行sp并将它们插入临时表。
没有使用openrowset的任何想法。
CREATE TABLE #TempStok(CODE VARCHAR(MAX),STOCKREF VARCHAR(MAX),AMOUNT INT)
INSERT INTO #TempStok EXEC spStokMiktar @ID_KULLANICI,@OTURUM,@ SIRKETKOD错误:INSERT EXEC语句不能嵌套。
答案 0 :(得分:1)
此错误消息告诉您的是,当尝试从一系列存储过程中“冒泡”数据时,SQL Server中的限制是您一次只能激活一个INSERT-EXEC。 这是article that discusses on how to solve this sort of problem.
如果您出于某种原因会尝试:
CREATE TABLE #BigSalesByStore(titleid varchar(80) NOT NULL PRIMARY KEY,
qty smallint NOT NULL)
INSERT #BigSalesByStore (titleid, qty)
EXEC BigSalesByStore '7131', 25
SQL Server会告诉你:
Msg 8164, Level 16, State 1, Procedure BigSalesByStore, Line 8
An INSERT EXEC statement cannot be nested.
如果您可以更改要呼叫的程序,有两种方法可以缓解此问题。一种是简单地在被调用者的代码中添加注释,以便下一个开发人员了解依赖关系,并希望也改变您的过程。 另一种方法是使用表类型(如果您使用的是SQL 2008或更高版本)。这是一个例子:
CREATE TYPE SalesByStore_tbl AS TABLE
(titleid varchar(80) NOT NULL PRIMARY KEY,
qty smallint NOT NULL)
go
CREATE PROCEDURE SalesByStore @storeid varchar(30) AS
DECLARE @ret SalesByStore_tbl
INSERT @ret (titleid, qty)
SELECT t.title, s.qty
FROM sales s
JOIN titles t ON t.title_id = s.title_id
WHERE s.stor_id = @storeid
SELECT * FROM @ret
go
CREATE PROCEDURE BigSalesByStore @storeid varchar(30),
@qty smallint AS
DECLARE @data SalesByStore_tbl
INSERT @data
EXEC SalesByStore @storeid
SELECT title, qty FROM @data WHERE qty >= @qty
go
EXEC SalesByStore '7131'
EXEC BigSalesByStore '7131', 25
go
DROP PROCEDURE SalesByStore, BigSalesByStore
DROP TYPE SalesByStore_tbl
答案 1 :(得分:0)
您可以创建表格并像这样插入......
CREATE TABLE #Temp(field dataType, field2 dataType... )
然后您可以像这样插入此表...
Insert Into #Temp EXEC sp... PARAM1, PARAM2
但是,如果临时表未设置为设计时,我认为它更复杂。