SELECT INTO在T-SQL表变量SELECT INTO在T-SQL表变量(SELECT IN

2019-05-12 18:42发布

有一个复杂的SELECT查询,从中我想所有行插入到表变量,但T-SQL不允许这样做。

按照同样的思路,你不能使用SELECT INTO表变量或INSERT EXEC查询。 http://odetocode.com/Articles/365.aspx

简短的例子:

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是相当小的,并在需要的时候它只是手动运行。
...或只是告诉我,如果我做这一切是错误的。

Answer 1:

尝试是这样的:

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

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


Answer 2:

的目的SELECT INTO是(根据文档,我的重点)

另一个表创建值的新表

但是你已经一个目标表! 所以,你想要的是

INSERT语句将一个或多个新行的表

您可以指定在以下几个方面的数据值:

...

通过使用SELECT子查询来针对一个或更多的行,诸如指定的数据值:

  INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView 

而在这个语法,它允许MyTable是表变量。



Answer 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


Answer 4:

你可以尝试使用临时表...如果你不是从应用程序这样做。 (它可能是确定手动运行此)

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应用程序的选项,如会话可以重复使用,坚持临时变量的情况下,



Answer 5:

尝试使用INSERT而不是SELECT INTO

INSERT @UserData   
SELECT name, location etc.


Answer 6:

首先创建一个临时表:

步骤1:

create table #tblOm_Temp (

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

**步骤2:**插入临时表中的某些值。

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

最后值从临时表表变量插入

第5步:可以检查表变量插入值。

select * from @tblOm_Variable


Answer 7:

OK,现在有了足够的努力,我能够插入使用下面的@table:

INSERT @TempWithheldTable SELECT
a.SuspendedReason,a.SuspendedNotes,a.SuspendedBy,a.ReasonCode FROM OPENROWSET(BULK 'C:\ databases中\ WithHeld.csv',FORMATFILE = N'C:\ databases中\ Format.txt”,
错误文件= N'C:\ TEMP \ MovieLensRatings.txt”)AS一个;

这里最主要的是选择插入列。



Answer 8:

使用SELECT INTO的一个原因是,它允许您使用的身份:

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

这不是一个表变量,这是太糟糕工作...



文章来源: SELECT INTO a table variable in T-SQL