簡體   English   中英

如果可能,插入臨時表。 通過動態查詢

[英]If possible to Insert Temp Table. Via Dynamic Query

我有一張這樣的表:

IF OBJECT_ID('tempdb..#A') IS NOT NULL
DROP TABLE #A

CREATE TABLE #A (AccountID BIGINT,MemberID VARCHAR(12),FirstName VARCHAR(50),LastName VARCHAR(50))
INSERT INTO #A VALUES('32323','Test3','Last4','999122'),('192506','999158','Vmtestone','Diamond')
SELECT * FROM #A

是否可以使用動態查詢插入到另一個臨時表中

SELECT * INTO Statement

我試過這個代碼:

DECLARE @B NVARCHAR(MAX)
SET @B=('SELECT * INTO #B FROM #A')
EXEC (@B)

SELECT * FROM #B

但我有這樣的錯誤

無效的對象名稱“#B”。

#B只存在於動態查詢的范圍內,所以你不能從它外面選擇。

將您的代碼更改為:

DECLARE @B NVARCHAR(MAX)
SET @B=('SELECT * INTO #B FROM #A; SELECT * FROM #B')
EXEC (@B)

它應該工作。

您可以使用全局臨時表。 只需將# 替換為##

IF OBJECT_ID('tempdb..##A') IS NOT NULL
DROP TABLE ##A

IF OBJECT_ID('tempdb..##B') IS NOT NULL
DROP TABLE ##B

CREATE TABLE ##A (AccountID BIGINT,MemberID VARCHAR(12),FirstName VARCHAR(50),LastName 
VARCHAR(50))
INSERT INTO ##A VALUES('32323','Test3','Last4','999122'), 
('192506','999158','Vmtestone','Diamond')
SELECT * FROM ##A

DECLARE @B NVARCHAR(MAX)
SET @B=('SELECT * into ##B FROM ##A')
print(@B)
EXEC(@B)

SELECT * FROM ##B

由於單個#創建了一個本地臨時表,它在EXECUTE語句中不可用。 您可以使用全局臨時表在范圍之外訪問它

IF OBJECT_ID('tempdb..#A') IS NOT NULL
DROP TABLE #A

IF OBJECT_ID('tempdb..##B') IS NOT NULL
DROP TABLE ##B

CREATE TABLE #A (AccountID BIGINT,MemberID VARCHAR(12),FirstName VARCHAR(50),LastName VARCHAR(50))
INSERT INTO #A VALUES('32323','Test3','Last4','999122'),('192506','999158','Vmtestone','Diamond')
SELECT * FROM #A

DECLARE @B NVARCHAR(MAX)
SET @B = 'SELECT * INTO ##B FROM #A'
EXEC (@B)

SELECT * FROM ##B

此處查看演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM