尝试插入临时文件时出现T-SQL错误

时间:2018-11-01 18:26:07

标签: sql-server tsql temp-tables insert-into

我有一个临时表,我正在尝试从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 

2 个答案:

答案 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列