得到了一个复杂的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

table变量中的数据稍后将用于将其插入/更新回不同的表中(大部分是相同数据的副本,只是进行了少量更新)。这样做的目的是使脚本比直接在正确的表中执行SELECT INTO更易于阅读和定制。 性能不是问题,因为行计数相当小,只有在需要时才手动运行。 ...或者直接告诉我是不是我做错了


当前回答

SELECT INTO的目的是(根据文档,我强调)

从另一个表中的值创建一个新表

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

INSERT语句向表中添加一个或多个新行 方法中指定数据值 以下的方法: ... 通过使用SELECT子查询指定 一行或多行的数据值, 如: 插入MyTable (PriKey描述) 选择ForeignKey, Description 从SomeView

在这个语法中,允许MyTable是一个表变量。

其他回答

首先创建一个临时表:

步骤1:

create table #tblOm_Temp (

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

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

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

步骤3:声明一个表变量来保存临时表数据。

declare   @tblOm_Variable table(

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

步骤4:从temp表中选择值并插入到表变量中。

insert into @tblOm_Variable select * from #tblom_temp

最后将值从临时表插入到table变量

步骤5:检查表变量中插入的值。

select * from @tblOm_Variable

您还可以使用公共表表达式来存储临时数据集。他们更优雅,更友好:

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

好的,现在有足够的努力,我能够插入到@表使用以下:

插入@TempWithheldTable SELECT a.SuspendedReason, a.SuspendedNotes, a.SuspendedBy, a.ReasonCode FROM OPENROWSET(BULK 'C:\DataBases\ withhold .csv', FORMATFILE = N 'C: \ \ Format.txt数据库”, ERRORFILE = N 'C: \ Temp \ MovieLensRatings.txt ' )作为一个;

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

使用SELECT INTO的一个原因是它允许你使用IDENTITY:

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

这对表变量不起作用,这太糟糕了……

SELECT INTO的目的是(根据文档,我强调)

从另一个表中的值创建一个新表

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

INSERT语句向表中添加一个或多个新行 方法中指定数据值 以下的方法: ... 通过使用SELECT子查询指定 一行或多行的数据值, 如: 插入MyTable (PriKey描述) 选择ForeignKey, Description 从SomeView

在这个语法中,允许MyTable是一个表变量。