繁体   English   中英

使用子查询向临时表SQL Server 2008中插入值时出现问题

[英]Issue inserting values with a subquery into temporary table SQL Server 2008

尝试使用SQL Server 2008将值插入临时表中,获得:

消息116,级别16,状态1,过程Test_temp_table,行274
如果未使用EXISTS引入子查询,则只能在选择列表中指定一个表达式。

使用此查询:

VALUES(
(select 
     a.*, b.[formal name], c.*, d.*
 from 
     selecthr20.employee.[career history] a, 
     selecthr20.Employee.[Current Appointments As At Evaluation Date] b,  
     Employee.[BSK Changes in Selected Period] c,
     selecthr20.employee.[career history extra detail] d
 where 
     a.[appointment number] = b.[appointment number]
     and a.[career number] = c.[primary key number]
     and a.[career number] = d.[career number]
     and c.[primary key number] = d.[career number]
     and c.[primary key name] = 'Career Number'
     and b.[person number] in (select b.[person number] 
                               from employee.[current pay as at evaluation date] 
                               where substring([Payroll Name],1,6) = 'DOV020')))

如果您不打算首先创建临时表,请使用select into。

IF OBJECT_ID('TEMPDB.DBO.#TEMP') IS NOT NULL
    DROP TABLE #TEMP;
BEGIN 
    SELECT 
        a.*, 
        b.[formal name], 
        c.*, 
        d.*
    INTO #TEMP
    FROM selecthr20.employee.[career history] a, 
        INNER JOIN selecthr20.Employee.[Current Appointments As At Evaluation Date] b
            ON a.[appointment number] = b.[appointment number]  
        INNER JOIN Employee.[BSK Changes in Selected Period] c
            ON a.[career number] = c.[primary key number]
        INNER JOIN selecthr20.employee.[career history extra detail] d
            ON a.[career number] = d.[career number]
                AND c.[primary key number] = d.[career number]
    where c.[primary key name] = 'Career Number'
    and b.[person number] in (select b.[person number] from employee.[current pay as at evaluation date] where substring([Payroll Name],1,6) = 'DOV020')
END

如果要先创建表然后插入,这里是一个模板,可让您了解结构。

CREATE TABLE #TEMP
(
    <YOURCOLUMNS>
)

INSERT INTO #TEMP
(
    <YOURCOLUMNS>
)
SELECT 
    <YOURCOLUMNS>
FROM selecthr20.employee.[career history] a, 
    INNER JOIN selecthr20.Employee.[Current Appointments As At Evaluation Date] b
        ON a.[appointment number] = b.[appointment number]  
    INNER JOIN Employee.[BSK Changes in Selected Period] c
        ON a.[career number] = c.[primary key number]
    INNER JOIN selecthr20.employee.[career history extra detail] d
        ON a.[career number] = d.[career number]
            AND c.[primary key number] = d.[career number]
where c.[primary key name] = 'Career Number'
and b.[person number] in (select b.[person number] from employee.[current pay as at evaluation date] where substring([Payroll Name],1,6) = 'DOV020')

您对查询结果的插入使用了错误的语法。 对于这种类型的插入,您不需要VALUES()部分。

附带说明一下,您应该避免在INSERT SELECT语句中使用SELECT * (或者在这种情况下, a.*, c.*, d.* ),因为临时表必须恰好适合该插入语句起作用,并且对目标表或源表的任何更改都将导致该中断。

您的声明应如下所示:

Insert  #YourTempTable
        (List, Your, Columns, Here, ...)
Select  a.*,
        b.[formal name],
        c.*,
        d.*
From    selecthr20.employee.[career history]                                a
Join    selecthr20.Employee.[Current Appointments As At Evaluation Date]    b   On  a.[appointment number] = b.[appointment number]
Join    Employee.[BSK Changes in Selected Period]                           c   On  a.[career number] = c.[primary key number]
Join    selecthr20.employee.[career history extra detail]                   d   On  a.[career number] = d.[career number]
                                                                                And c.[primary key number] = d.[career number]
                                                                                And c.[primary key name] = 'Career Number'
Where   b.[person number] In 
(
    Select  [person number] 
    From    employee.[current pay as at evaluation date] 
    Where   SubString([Payroll Name],1,6) = 'DOV020'
)

看起来您的where子句也是错误的。 删除列别名“ b”

select [person number] 
from employee.[current pay as at evaluation date] 
where substring([Payroll Name],1,6) = 'DOV020')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM