SQL错误213,列名称或提供的值的数量与表定义不匹配

时间:2016-02-09 15:56:06

标签: sql-server

尝试运行此SQL命令时出现此错误:

DECLARE @data INT = 1;
WHILE @data = 1
BEGIN 
IF EXISTS (SELECT * FROM [dbo].[WeeklyReport])
BEGIN
INSERT INTO [dbo].[WeeklyReportLogs]
SELECT *, DATEADD(day, -1, GETDATE()) AS DayofData
FROM [dbo].[WeeklyReport]
SET @data = 0
END
ELSE
WAITFOR DELAY '00:00:02'
END

两个表都具有相同的命名列和相同的值类型。此命令适用于其他2个以相同方式设置的表。我应该寻找什么可能会有所不同?我已经放弃了两张桌子并从头开始多次,但仍会导致此错误。

我只需要每周报告(每日记录)中的数据将数据输入WeeklyReportLogs(这将记录前一天记录在WeeklyReport中的数据)。

WeeklyReport定义:

Agent Name  varchar no  50                  yes no  yes SQL_Latin1_General_CP1_CI_AS
TotalBreak  int no  4   10      0       yes (n/a)   (n/a)   NULL
TotalLunch  int no  4   10      0       yes (n/a)   (n/a)   NULL
TotalLogin  int no  4   10      0       yes (n/a)   (n/a)   NULL
DayofData   varchar no  50                  yes no  yes SQL_Latin1_General_CP1_CI_AS

WeeklyReportLogs定义:

Agent Name  varchar no  50                  yes no  yes SQL_Latin1_General_CP1_CI_AS
TotalBreak  int no  4   10      0       yes (n/a)   (n/a)   NULL
TotalLunch  int no  4   10      0       yes (n/a)   (n/a)   NULL
TotalLogin  int no  4   10      0       yes (n/a)   (n/a)   NULL

1 个答案:

答案 0 :(得分:2)

首先,尽量避免在查询中使用*。它的行为可能会导致麻烦,因为它在编译对象(视图,存储过程等)时静态扩展到实际列,而不是在运行时。

如果[dbo].[WeeklyReportLogs]dbo.WeeklyReport都有相同的列数(n),那么:

INSERT INTO [dbo].[WeeklyReportLogs]                -- n columns
SELECT *, DATEADD(day, -1, GETDATE()) AS DayofData  -- n+1 columns
FROM [dbo].[WeeklyReport]

此外,尝试始终在插入中指定列,因为架构更改可能会在运行对象时导致失败(而不是在更改表时):

INSERT INTO [dbo].[WeeklyReportLogs]  
(column1, column2,  .... etc)              
SELECT {actual columns here}, DATEADD(day, -1, GETDATE()) AS DayofData  
FROM [dbo].[WeeklyReport]