SELECT INTO T-SQL中的表variables
有一个复杂的SELECT查询,我想从中插入所有行到表variables,但T-SQL不允许它。
沿着同样的路线,你不能在SELECT INTO或INSERT EXEC查询中使用表variables。 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
表variables中的数据稍后将被用来将其插入/更新回到不同的表中(主要是更新次数相同的数据的副本)。 这样做的目的是简单地使脚本更易读,更容易定制,而不是直接将SELECT INTO
input到正确的表中。 性能不是问题,因为行rowcount
相当小,只有在需要时手动运行。
…或者只是告诉我,如果我做错了。
尝试这样的事情:
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;
SELECT INTO
的目的是(根据文档,我的重点)
从另一个表中的值创build一个新表
但是你已经有了一个目标表! 所以你想要的是
INSERT
语句将一个或多个新行添加到表中您可以通过以下方式指定数据值:
…
通过使用
SELECT
子查询来指定一个或多个行的数据值,例如:INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView
在这个语法中,允许MyTable
是一个表variables。
您还可以使用公用表expression式来存储临时数据集。 他们更优雅和友善:
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
你可以尝试使用临时表…
SELECT name, location INTO #userData FROM myTable INNER JOIN otherTable ON ... WHERE age>30
您可以跳过这样的方式来声明表格…帮助临时查询…这将创build一个本地临时表,除非您在应用程序中使用相同的连接,否则其他连接将不可见。
如果你需要variables,可以这样声明:
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;
尝试使用INSERT
而不是SELECT INTO
:
INSERT @UserData SELECT name, location etc.
首先创build一个临时表:
步骤1:
create table #tblOm_Temp ( Name varchar(100), Age Int , RollNumber bigint )
**步骤2:**在Temp表格中插入一些值。
insert into #tblom_temp values('Om Pandey',102,1347)
第3步:声明一个表variables来保存临时表数据。
declare @tblOm_Variable table( Name Varchar(100), Age int, RollNumber bigint )
步骤4:从临时表中select值并插入表variables。
insert into @tblOm_Variable select * from #tblom_temp
最后,将值从临时表插入到表variables中
第5步:可以检查表variables中的插入值。
select * from @tblOm_Variable
好的,现在我有足够的努力,我可以插入到@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',
ERRORFILE = N'C:\ Temp \ MovieLensRatings.txt')AS a;
这里主要的是select要插入的列。
使用SELECT INTO的一个原因是它允许你使用IDENTITY:
SELECT IDENTITY(INT,1,1) AS Id, name INTO #MyTable FROM (SELECT name FROM AnotherTable) AS t
这不会与表variables,这是太糟糕了…