SELECT INTO T-SQL中的表變量

有一個複雜的SELECT查詢,我想從中將全部行插入表變量,可是T-SQL不容許它。 性能

一樣,您不能將表變量與SELECT INTO或INSERT EXEC查詢一塊兒使用。 http://odetocode.com/Articles/365.aspx spa

簡短的例子: code

declare @userData TABLE(
                        name varchar(30) NOT NULL,
                        oldlocation varchar(30) NOT NULL
                       )

SELECT name, location
INTO @userData
FROM myTable
    INNER JOIN otherTable ON ...
WHERE age > 30

表變量中的數據稍後將用於將其插入/更新回不一樣的表(大多數是具備次要更新的相同數據的副本)。 這樣作的目的是簡單地使腳本比直接在右表中執行SELECT INTO更易讀,更容易定製。 性能不是問題,由於rowcount至關小,而且只在須要時手動運行。
......或者告訴我,若是我作錯了。 get


#1樓

使用SELECT INTO的一個緣由是它容許您使用IDENTITY: io

SELECT IDENTITY(INT,1,1) AS Id, name
INTO #MyTable 
FROM (SELECT name FROM AnotherTable) AS t

這不適用於表變量,這太糟糕了...... table


#2樓

首先建立一個臨時表: 變量

步驟1: select

create table #tblOm_Temp (

    Name varchar(100),
    Age Int ,
    RollNumber bigint
)

**步驟2:**在Temp表中插入一些值。 bug

insert into #tblom_temp values('Om Pandey',102,1347)

步驟3:聲明表變量以保存臨時表數據。 程序

declare   @tblOm_Variable table(

    Name Varchar(100),
    Age int,
    RollNumber bigint
)

第4步:從臨時表中選擇值並插入表變量。

insert into @tblOm_Variable select * from #tblom_temp

最後,將值從臨時表插入到Table變量中

第5步:能夠檢查表變量中的插入值。

select * from @tblOm_Variable

#3樓

您還可使用公用表表達式來存儲臨時數據集。 它們更優雅,更友好:

WITH userData (name, oldlocation)
AS
(
  SELECT name, location 
  FROM   myTable    INNER JOIN 
         otherTable ON ...
  WHERE  age>30
)
SELECT * 
FROM   userData -- you can also reuse the recordset in subqueries and joins

#4樓

嘗試使用INSERT而不是SELECT INTO

INSERT @UserData   
SELECT name, location etc.

#5樓

您能夠嘗試使用臨時表...若是您不是從應用程序執行此操做。 (手動運行可能沒問題)

SELECT name, location INTO #userData FROM myTable
INNER JOIN otherTable ON ...
WHERE age>30

您跳過了以這種方式聲明表的努力...幫助進行特殊查詢...這將建立一個本地臨時表,除非您在同一會話中,不然其餘會話不會顯示。 若是您從應用程序運行查詢,可能會出現問題。

若是您要求它在應用程序上運行,請使用以這種方式聲明的變量:

DECLARE @userData TABLE(
    name varchar(30) NOT NULL,
    oldlocation varchar(30) NOT NULL
);

INSERT INTO @userData
SELECT name, location FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30;

編輯:不少人都提到了來自鏈接的會話的更新可見性。 建立臨時表不是Web應用程序的選項,由於會話能夠重用,在這些狀況下堅持使用臨時變量

相關文章
相關標籤/搜索