在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