带有参数的SQL EXEC SP到TEMP表中

时间:2014-07-03 09:32:48

标签: sql-server tsql

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语句不能嵌套。

2 个答案:

答案 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

但是,如果临时表未设置为设计时,我认为它更复杂。