我有一个临时表,我正在尝试从select语句中填充它。
但是我遇到此错误:
列名或提供的值数与表定义不符
我已经使用endtime
将其跟踪到LEAD
列;如果我删除了此LEAD
列,它将起作用吗?
不确定我缺少什么
感谢迈克
IF OBJECT_ID('tempdb.dbo.#flextx', 'U') IS NOT NULL
DROP TABLE #flextx;
CREATE TABLE dbo.#flextx
(
OmanId VARCHAR(255),
MRDF VARCHAR(255),
status VARCHAR(255),
statusid BIGINT,
EVENT_ACTION BIGINT,
starttime DATETIME,
endtime DATETIME
)
INSERT INTO dbo.#flextx
SELECT
f.OmanId,
f.MRDF,
s.status,
s.statusid,
f.EVENT_ACTION,
(f.TIMESTAMP) AS starttime,
(LEAD(f.TIMESTAMP, 1, GETDATE()) OVER (ORDER BY f.TIMESTAMP)) AS endtime
FROM
dbo.#flext f
LEFT JOIN
dbo.statues AS s ON s.flexstatus = f.JOB_STATUS_TEXT
WHERE
EVENT_ACTION IN (225, 226)
AND s.statusid = 23
ORDER BY
MRDF, EVENT_ACTION
答案 0 :(得分:3)
这是一个编译时错误。在GO
语句后添加CREATE TABLE
。
正在发生的事情是您正在重新定义表。 编译时使用旧定义。您还应该可以通过删除表的现有版本来解决此问题。
答案 1 :(得分:0)
您有错字,我想您希望结束时间是下一次开始时间,就像这样:
(f.starttime) AS starttime,
( LEAD(f.starttime,1,GetDate()) OVER (ORDER BY mrdf, event_action) ) AS endtime
没有TIMESTAMP列