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应用程序的选项,由于会话能够重用,在这些状况下坚持使用临时变量

相关文章
相关标签/搜索