尝试使用SQL Server 2008将值插入临时表,获取:
Msg 116,Level 16,State 1,Procedure Test_temp_table,Line 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')))
答案 0 :(得分:2)
如果您不打算先创建临时表,请使用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')
答案 1 :(得分:1)
您对查询结果中的插入使用了错误的语法。对于此类插入,您不需要VALUES()
部分。
作为旁注,您应该避免在SELECT *
语句中使用a.*, c.*, d.*
(或者,在本例中为INSERT SELECT
),因为您的临时表必须设置恰好使该insert语句正常工作,对目标或源表的任何更改都会导致它被破坏。
你的陈述应该是这样的:
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'
)
答案 2 :(得分:0)
看起来你的where子句也是错误的。删除列别名'b'
即
select [person number]
from employee.[current pay as at evaluation date]
where substring([Payroll Name],1,6) = 'DOV020')