【问题标题】:Insert into table with select statement plus additional column in SQL Server 2008在 SQL Server 2008 中使用 select 语句和附加列插入表
【发布时间】:2013-10-30 20:14:11
【问题描述】:

我正在尝试从 select 语句中插入表,并使用类似的东西向行添加其他参数-

SELECT 
        Appt_ID,
        Pracitioner_ID,
        Appt_Book_ID,
        Start_Time,
        UR_NO,
        [Type],
       [Description]
FROM @TempWaiting,
 @EndTime,
 @PatientID, 
 @Title, 
 @FirstName, 
 @LastName, 
 @Surname, 
 @DOB
INTO PS_WAITING_LIST(Appt_ID,   
        Pracitioner_ID,
        Appt_Book_ID,
        Start_Time,
        UR_NO,
        [Type],
        [Description],
        End_Time,
        Patient_ID, 
        Title,
        First_Name,
        Middle_Name,
        Surname,
        DOB)

这是在存储过程中,在 INTO 之后它说的只是错误。

我也尝试将其重写为 -

insert into PS_WAITING_LIST (
        Appt_ID,    
        Pracitioner_ID,
        Appt_Book_ID,
        Start_Time,
        UR_NO,
        [Type],
        [Description],
        End_Time,
        Patient_ID, 
        Title,
        First_Name,
        Middle_Name,
        Surname,
        DOB)
SELECT 
        Appt_ID,
        Pracitioner_ID,
        Appt_Book_ID,
        Start_Time,
        UR_NO,
        [Type],
        [Description]
FROM @TempWaiting,
 @EndTime,
 @PatientID, 
 @Title, 
 @FirstName, 
 @LastName, 
 @Surname, 
 @DOB

这会引发错误,说明选择值的数量必须与插入列的数量匹配。显然不是。

我也尝试过插入表格 (col1, col2..) Select * from (select (...), col3, col9)

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:

    一般是这样的

    insert into your_table (col1, col2, col3)
    select some_column, @aVariable, 'static_string'
    from another_table
    

    【讨论】:

    • 即使@aVariable 不属于另一个表?
    • 变量从不属于一个表。
    【解决方案2】:

    假设@tempWaiting 是一个变量表,那么语句应该是这样的。

        insert into PS_WAITING_LIST (
        Appt_ID,    
        Pracitioner_ID,
        Appt_Book_ID,
        Start_Time,
        UR_NO,
        [Type],
        [Description],
        End_Time,
        Patient_ID, 
        Title,
        First_Name,
        Middle_Name,
        Surname,
        DOB)
    SELECT 
        Appt_ID,
        Pracitioner_ID,
        Appt_Book_ID,
        Start_Time,
        UR_NO,
        [Type],
        [Description],
        @EndTime,
        @PatientID, 
        @Title, 
        @FirstName, 
        @LastName, 
        @Surname, 
        @DOB
    FROM @TempWaiting
    

    【讨论】:

    • 是的。 +1,但于尔根首先指出。所以我会接受他的。
    • 没问题我只是想帮忙:D
    【解决方案3】:

    如果您有一个包含许多列的表,将它们全部列出可能会很乏味。要将列添加到插入的末尾,例如,loggedAT 或 recreatedAt 时间戳,可以执行以下操作。先创建一个dts列作为最后一列,然后

    INSERT INTO users_log SELECT *, NOW() FROM users WHERE id=?;
    

    在这种情况下,我们现在知道该列何时添加到我们的 users_log 表中。最后一种情况是我们可能还需要一个特定于 users_log 表的主键。让我们通过在表的末尾添加一个“key”列来再次修改 users_log 表,将其设置为 PK、AUTO、UNSIGNED。我们现在可以使用以下内容填充该 id:

    INSERT INTO users_log SELECT *, NOW(), '' FROM users WHERE id=?;
    

    现在我们有了用户记录的精确副本,包括来自用户表的 PK,在我们的 users_log 表中,我们现在可以跟踪记录何时被复制并生成自己的 PK。请注意,需要修改 users_log 表以从用户表中的 id 中删除 PK,以防止 id 冲突。

    【讨论】:

      【解决方案4】:

      您也可以尝试以下方法:

      Insert Into CustomerNew (CustomerId, CustomerName) 
        SELECT CustID, Name
        FROM CustomerOld WHERE CustomerId Is not Null
      

      【讨论】:

        【解决方案5】:

        我有两个表,表 firstsecond

        • 第一个表包含产品和价格
        • 第二个表有月份列和总计列

        我想用第一个表中的产品总和加上月份来更新第二个表。

        我发现此查询很有用,我认为您可以尝试解决您的问题

        INSERT INTO second (month, total) SELECT 'JANUARY' SUM(PRICE) AS TOTAL FROM first
        

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 2014-02-28
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2011-10-30
        • 1970-01-01
        相关资源
        最近更新 更多