尝试运行此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
答案 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]