在T中选择一个表变量

有一个复杂的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相当小,只在需要时手动运行。
...或者只是告诉我,如果我做错了。


尝试这样的事情:

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;

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

根据另一个表中的值创建新表

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

INSERT语句将一个或多个新行添加到表中

您可以通过以下方式指定数据值:

...

通过使用SELECT子查询来为一行或多行指定数据值,例如:

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

在这个语法中,允许MyTable成为表变量。


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

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
链接地址: http://www.djcxy.com/p/93827.html

上一篇: SELECT INTO a table variable in T

下一篇: Query about SQL Injection in webpages