【问题标题】:How to troubleshoot errors INSERT INTO in SQL Server?如何解决 SQL Server 中的 INSERT INTO 错误?
【发布时间】:2018-03-14 16:36:22
【问题描述】:

这是我的查询:

INSERT INTO aa_Tanks_Ponds ([User_Name],
                            [Type],
                            Site_Name,
                            Species,
                            Year_Class,
                            Tank_Pond,
                            Letter,
                            [Name],
                            Tank_Pond_uID,
                            Start_Inventory_#,
                            Start_Inventory_lbs,
                            Start_Inventory_avg,
                            Stocking_#,
                            Stocking_lbs,
                            Stocking_from,
                            Stocking_Total_#,
                            Stocking_Total_lbs,
                            Sales_#,
                            Sales_lbs,
                            Sales_Total_#,
                            Sales_Total_lbs,
                            Mortality_#,
                            Mortality_lbs,
                            Transfers_#,
                            Transfers_lbs,
                            Transfers_To,
                            Transfer_Total_#,
                            Transfer_Total_lbs,
                            Plus_Min_#,
                            Plus_Min_lbs,
                            Plus_Min_Total_#,
                            Plus_Min_Total_lbs,
                            Feed_lbs_Tanks_Ponds,
                            Feed_growth_feed,
                            Feed_growth_FCR,
                            Feed_growth_gain,
                            Final_Inventory_#,
                            Final_Inventory_lbs,
                            Final_Inventory_avg,
                            bg_color,
                            tx_color,
                            sort_order,
                            FeedValue)
VALUES ('Chase Ayers','Chase Ayers','Chase Ayers','Chase Ayers','Chase Ayers','Chase Ayers'),
       (NULL,NULL,NULL,NULL,NULL,NULL),
       ('Dry Creek','Dry Creek','Dry Creek','Dry Creek','Dry Creek','Dry Creek'),
       ('Sturgeon','Sturgeon','Sturgeon','Sturgeon','Sturgeon','Sturgeon'),
       ('14C','14C','14C','14C','14C','14C'),
       ('Tank','Tank','Tank','Tank','Tank','Tank'),
       ('H','H','H','H','H','H'),
       ('H1','H2','H3','H4','H5','H6'),
       ('DCH1','DCH2','DCH3','DCH4','DCH5','DCH6'),
       (2985,2995,2678,2947,3175,3040),
       (30144,27560,27161,27956,32600,33221),
       (10.1,9.2,10.14,9.49,10.27,10.93),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (' ',' ',' ',' ',' ',' '),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (' ',' ',' ',' ',' ',' '),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (0,0,0,0,0,0),
       (2,2,2,2,2,2),
       (0,0,0,0,0,0),
       (2985,2995,2678,2947,3175,3040),
       (30144,27560,27161,27956,32600,33221),
       (10.1,9.2,10.14,9.49,10.27,10.93),
       ('FFFF00','99CC33','3399CC','FF66CC','FFFF00','FFFF00'),
       ('996600','CCFF66','660099','CCCCCC','900000','FFCC99'),
       (0,0,0,0,0,0),
       (NULL,NULL,NULL,NULL,NULL,NULL);

我已经检查了很多次,试图找出错误的原因:

INSERT 语句中的列多于指定的值 在 VALUES 子句中。 VALUES 子句中的值的数量必须 匹配 INSERT 语句中指定的列数。

对我来说,这个错误是说我在 INSERT 子句中有 43 个语句,而我在 VALUES 子句中没有 43 个语句。然而,每次我检查都有一个匹配项。

除了手动遍历数据之外,还有更简单的方法来解决此类数据问题吗?

【问题讨论】:

  • 我没有费心计算所有这些,但(NULL,NULL,NULL,NULL,NULL,NULL) 的值肯定比你提到的列少。
  • 您尝试插入 42 列,但您的所有 VALUES 仅包含大约 7 项。
  • 您的表值构造函数几乎每一行都有不同数量的值。而且它们都没有插入语句中的列那么多。然后你的数据类型也到处都是不匹配的。
  • 错误是插入的每一行应该有43列。您似乎已经转置了数据。
  • 您的表格有 43 列。您的所有数据都是旋转的,因此您尝试将每一行插入单个列(垂直)。您需要旋转数据,以便在每列的每个 VALUES 行中有 1 个数据点(43 个逗号分隔参数,总共 6 个括号)

标签: sql sql-server sql-insert


【解决方案1】:

“VALUES”后括号中的内容是要插入的内容。因此,目前您正尝试将 6 批“Chase Ayers”插入 43 行。您插入的第一行将是这样(然后只需要调整要插入的剩余 5 行) - 请注意要插入的所有值都在一组括号内:

INSERT INTO aa_Tanks_Ponds ([User_Name],[Type],Site_Name,Species,Year_Class,Tank_Pond,Letter,[Name],Tank_Pond_uID,Start_Inventory_#,Start_Inventory_lbs,Start_Inventory_avg,Stocking_#,Stocking_lbs,Stocking_from,Stocking_Total_#,Stocking_Total_lbs,Sales_#,Sales_lbs,Sales_Total_#,Sales_Total_lbs,Mortality_#,Mortality_lbs,Transfers_#,Transfers_lbs,Transfers_To,Transfer_Total_#,Transfer_Total_lbs,Plus_Min_#,Plus_Min_lbs,Plus_Min_Total_#,Plus_Min_Total_lbs,Feed_lbs_Tanks_Ponds,Feed_growth_feed,Feed_growth_FCR,Feed_growth_gain,Final_Inventory_#,Final_Inventory_lbs,Final_Inventory_avg,bg_color,tx_color,sort_order,FeedValue)
VALUES ('Chase Ayers',NULL,'Dry Creek','Sturgeon','14C','Tank','H','H1','DCH1',2985,30144,10.1,0,0,' ',0,0,0,0,0,0,0,0,0,0,' ',0,0,,0,0,0,0,0,0,2,0,2985,30144,10.1,'FFFF00','996600',0,NULL);

【讨论】:

  • 这并没有证明INSERT INTO table (x, y, z) VALUES (11, 12, 13), (21, 22, 23), (31, 32, 33) 非常适合插入三行。 (它只是暗示它......)
【解决方案2】:

我认为您期望每组 () 是一列值。这些是行。该组中的每个项目都是一列。

您需要一次插入一行。

VALUES(User_Name
,Type
,Site_Name
,Species
,Year_Class
,Tank_Pond
,Letter
,NAME
,Tank_Pond_uID
,...etc)
,
(User_Name
,Type
,Site_Name
,Species
,Year_Class
,Tank_Pond
,Letter
,NAME
,Tank_Pond_uID
,...etc)

这是有道理的,因为数据在数据库中存储为行。它们不存储为列,因此(基本上)每个操作都是基于行的操作。

【讨论】:

  • 即使表是列存储,语法仍然是基于行的。这不是存储的结果,它只是语法......
【解决方案3】:

因为它更易读,您可以考虑将要导入的数据放入 CSV 中,然后将 that 导入 SQL,而不必以当前格式写出来。更容易确保一切都按照您的意愿安排。以下是 CSV 导入的操作方法,假设您使用的是 SQL Server Management Studio:https://support.discountasp.net/kb/a1179/how-to-import-a-csv-file-into-a-database-using-sql-server-management-studio.aspx

【讨论】:

    【解决方案4】:

    在 SQL Server Management Studio 中,可以使用内置的错误列表窗格轻松跟踪错误。此窗格可以在“查看”菜单中激活,或者使用快捷键Ctrl+\ 和 Ctrl+E

    阅读更多here

    【讨论】:

    • 完美,从长远来看,这将有很大帮助,谢谢!
    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多