我包括了所有相關的內容,直到出現錯誤,但在案例陳述句代碼之前一切正常并且運行良好;運行時出現錯誤“列名或提供的值的數量與表定義不匹配”,但我終生無法找到問題。謝謝!
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].
[Classifications]') AND TYPE IN (N'U'))
DROP TABLE Classifications
GO
CREATE TABLE Classifications
(
SegmentID nvarchar(10),
Waterbody_Type nvarchar(10),
Waterbody_Name nvarchar(100),
Basin nvarchar(50),
Segment_Miles int,
Water_Quality_Class nvarchar(100)
)
BULK INSERT Classifications FROM 'C:\Project\Classifications.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0a'
);
GO
ALTER TABLE Classifications ADD Segment_Length nvarchar(100)
DELETE FROM Classifications
WHERE COALESCE (Segment_Miles, Segment_Length) IS NULL;
INSERT INTO Classifications
SELECT SegmentID,
Segment_Length =
CASE
WHEN Segment_Miles >= 0 and Segment_Miles <= 50 THEN 'Short'
WHEN Segment_Miles > 50 and Segment_Miles <= 100 THEN 'Long'
ELSE '?'
END
FROM Classifications
uj5u.com熱心網友回復:
我認為您的意思是要進行更新,而不是最后插入。看起來您正在嘗試根據 Segment Miles 填充 Segment_Length 欄位,而不是添加僅包含 SegmentID 和 Segment_Length 的新行。如果是這樣 - 類似:
UPDATE Classifications
SET Segment_Length = CASE
WHEN Segment_Miles >= 0 and Segment_Miles <= 50 THEN 'Short'
WHEN Segment_Miles > 50 and Segment_Miles <= 100 THEN 'Long'
ELSE '?'
END
您收到錯誤的原因是您試圖將記錄插入包含 7 個欄位的表中,但您的 select 陳述句僅包含 2 個欄位。如果您實際上是在嘗試插入新記錄,則需要更改 INSERT 行以指定要填充的兩個欄位:
INSERT INTO Classifications (SegmentID, Segment_Length)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468899.html
