首页 文章

SELECT INTO T-SQL中的表变量

提问于
浏览
313

有一个复杂的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

表变量中的数据稍后将用于将其插入/更新回不同的表(大多数是具有次要更新的相同数据的副本) . 这样做的目的是简单地使脚本更容易阅读,并且比直接在右表中执行_1317881更容易定制 . 性能不是问题,因为 rowcount 相当小,只在需要时手动运行 .
......或者告诉我,如果我做错了 .

8 回答

  • 5

    尝试这样的事情:

    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;
    
  • 14

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

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

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

    INSERT语句向表中添加一个或多个新行您可以通过以下方式指定数据值:...使用SELECT子查询指定一行或多行的数据值,例如:INSERT INTO MyTable
    (PriKey,描述)
    SELECT ForeignKey,描述
    来自SomeView

    在这种语法中,允许 MyTable 成为表变量 .

  • 1

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

    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
    
  • 501

    您可以尝试使用临时表...

    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;
    
  • 22

    尝试使用 INSERT 而不是 SELECT INTO

    INSERT @UserData   
    SELECT name, location etc.
    
  • -5

    首先创建一个临时表:

    Step 1:

    create table #tblOm_Temp (
    
        Name varchar(100),
        Age Int ,
        RollNumber bigint
    )
    

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

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

    Step 3: 声明表变量以保存临时表数据 .

    declare   @tblOm_Variable table(
    
        Name Varchar(100),
        Age int,
        RollNumber bigint
    )
    

    Step 4: 从临时表中选择值并插入表变量 .

    insert into @tblOm_Variable select * from #tblom_temp
    

    最后,将值从临时表插入到Table变量中

    Step 5: 可以检查表变量中的插入值 .

    select * from @tblOm_Variable
    
  • 84

    好的,现在有了足够的努力,我可以使用以下内容插入@table:

    INSERT @TempWithheldTable SELECT a.S.SpendedpendedReason,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;

    这里主要是选择要插入的列 .

  • 7

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

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

    这不适用于表变量,这太糟糕了......

相关问题