【发布时间】:2014-09-17 08:08:33
【问题描述】:
我在执行下面给出的查询时在生产中遇到了这个错误
列名或提供的值数量与表定义不匹配。
查询:
BEGIN TRANSACTION
BEGIN TRY
IF EXISTS (SELECT * FROM Support.sys.objects WHERE object_id = OBJECT_ID(N'[Support]. [dbo].[ReportData]') AND type in (N'U'))
BEGIN
DROP TABLE SUPPORT.[dbo].ReportData
END
SELECT *,CAST(NULL AS DATETIME) as LoadDate,CAST(NULL AS VARCHAR(100)) AS Action
INTO Support.[dbo].[ReportData]
FROM dbo.ReportMain
WHERE 1 = 0;
UPDATE mso
SET mso.ReportStatus = '00'
OUTPUT DELETED.*,
@LoadDate,
'UPDATE'
INTO Support.dbo.ReportData
FROM dbo.ReportMain mso
INNER JOIN dbo.ReportHdr HDR
ON mso.ReportId=HDR.ReportId
WHERE mso.ReportStatus IN ('02','29')
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
PRINT 'FAILED !!!';
END CATCH
表 dbo.ReportMain 最近已在生产环境中删除并重新创建,添加了一些列,并且其顺序已更改,并且此查询在此修改之前正确执行。
谁能解释为什么会发生这个错误
【问题讨论】:
-
如果你说
ReportMain的列顺序发生了变化,问题很可能是SELECT * ... INTO Support.[dbo].[ReportData] FROM dbo.ReportMain,但ReportData的结构没有变化,这可以解释错误。
标签: sql sql-server tsql sql-insert