【问题标题】:T-SQL error when trying to insert into a temp尝试插入临时文件时出现 T-SQL 错误
【发布时间】:2018-11-01 18:26:07
【问题描述】:

我有一个临时表,我正试图从 select 语句中填充。

但是我收到了这个错误:

列名或提供的值的数量与表定义不匹配

我已将其追踪到使用LEAD 的列endtime;如果我删除了这个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 

【问题讨论】:

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


    【解决方案1】:

    这是一个编译时错误。在CREATE TABLE 语句之后添加GO

    正在发生的事情是您正在重新定义表格。 编译脚本时使用旧定义。您还应该能够通过删除表的现有版本来解决此问题。

    【讨论】:

      【解决方案2】:

      您有一个错字,我认为您希望 endtime 成为下一个开始时间,如下所示:

           (f.starttime) AS starttime,
            ( LEAD(f.starttime,1,GetDate()) OVER (ORDER BY mrdf, event_action) ) AS endtime 
      

      没有 TIMESTAMP 列

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-21
        • 1970-01-01
        • 2019-08-09
        • 2023-03-06
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        相关资源
        最近更新 更多