Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我是如何违反这个约束的?_Sql_Sql Server_Database_Tsql_Sql Server 2000 - Fatal编程技术网

Sql 我是如何违反这个约束的?

Sql 我是如何违反这个约束的?,sql,sql-server,database,tsql,sql-server-2000,Sql,Sql Server,Database,Tsql,Sql Server 2000,我在表中有此约束: CREATE TABLE [dbo].[InventoryLocations] ( [recid] [int] IDENTITY(1,1) NOT NULL, [LocItemNumber] [char](16) NOT NULL, [WareHouse] [char](2) NOT NULL, [Aisle] [char](3) NOT NULL, [Slot] [char](3) NOT NULL, [locLevel] [

我在表中有此约束:

CREATE TABLE [dbo].[InventoryLocations]
(
    [recid] [int] IDENTITY(1,1) NOT NULL,
    [LocItemNumber] [char](16) NOT NULL,
    [WareHouse] [char](2) NOT NULL,
    [Aisle] [char](3) NOT NULL,
    [Slot] [char](3) NOT NULL,
    [locLevel] [char](2) NOT NULL,
    [Bin] [char](2) NOT NULL,
    [Extra] [char](2) NOT NULL,
    [LocNumber] [char](2) NOT NULL,
    [RollNumber] [char](20) NOT NULL,
    [QuickRoll] [int] NOT NULL,
    [SkidNumber] [char](15) NOT NULL,
    [RollsInStock] [int] NOT NULL,
    [LocQtyOnHand] [float] NOT NULL,
    [LocQtyOnOrder] [float] NOT NULL,
    [LocQtyCommited] [float] NOT NULL,
    [TotalReceived] [float] NOT NULL,
    [TotalIssued] [float] NOT NULL,
    [TotalDollars] [float] NOT NULL,
    [Capacity] [float] NOT NULL,
    [AvailableSpace] [float] NOT NULL,
    [bkey0] [char](30) NULL,
    [bkey1] [char](30) NULL,
    [bkey2] [char](30) NULL,
    [bkey3] [char](14) NULL,
    [LastPhysicalCountDate] [datetime] NULL,
    [LastCycleCountDate] [datetime] NULL,
    [EnteredBy] [varchar](50) NULL,
    [EnteredDateTime] [datetime] NULL,
CONSTRAINT [IX_InventoryLocations_1] UNIQUE NONCLUSTERED 
(
    [LocItemNumber] ASC,
    [WareHouse] ASC,
    [Aisle] ASC,
    [Slot] ASC,
    [locLevel] ASC,
    [Bin] ASC,
    [Extra] ASC,
    [RollNumber] ASC,
    [SkidNumber] ASC
));
当尝试插入以下行时,我会收到错误消息。 在填充变量的游标内

INSERT INTO [AVANTISERVER\NCL_MASTER].[Avanti].[dbo].[InventoryLocations](LocItemNumber, WareHouse, Aisle, Slot, locLevel, Bin, Extra, RollNumber, LocQtyOnHand, SkidNumber)
            SELECT @item, 'F', 'L', 'E', 'X', 'O', @seq, @seq, @qty, @seq
            FROM FI_CurrentReceiptData CR
其结果是:

VALUES('MW1', 'F', 'L', 'E', 'X', 'O', 0, 0, 10, 0)
VALUES('MW1', 'F', 'L', 'E', 'X', 'O', 1, 1, 10, 1)
Msg 2627,14级,状态2,第34行违反唯一密钥 约束“IX_InventoryLocations_1”。无法在中插入重复的密钥 对象“InventoryLocations”


请帮助我理解为什么我不能进行这些插入?我对这些复杂的约束没有经验。这是什么意思(简单地说)以及我如何避开它?我真的违反了约束吗?

在不知道要插入的列的名称的情况下,仅通过约束中列出的列的数量(9)看起来每一行在表
InventoryLocations
中都必须是唯一的。您正在插入(10)列。基于要添加的数据,您的约束定义错误

编辑:编辑表定义后,
唯一约束
中列出的列仍然过多,这导致了
插入
失败。如果列出要插入的列名,这将非常有帮助


编辑:将硬编码值插入约束中列出的列中。因为它们总是相同的,所以违反了约束,您会看到您发布的错误。您需要改变进入表中的数据,或者通过删除一些列来放松约束。

您必须让我们知道插入的
的第一部分,而不仅仅是值。但是,很容易看出发生的情况,基本上是您试图插入一条违反
[IX\u InventoryLocations\u 1]
的记录,该记录指出表中没有两条记录可以具有以下字段的相同值:

[LocItemNumber]
[WareHouse]
[Aisle]
[Slot]
[locLevel]
[Bin]
[Extra]
[RollNumber]
[SkidNumber]

表中是否已有与您试图插入的问题中的数据冲突的行

在评论和问题编辑后编辑
添加以下内容:


在循环中输入一些指纹,以查看要插入的值。我认为SQL Server不会发出错误,除非您尝试插入DUP。

您的
SELECT
列表中的所有项目都是常量表达式

INSERT INTO [AVANTISERVER\NCL_MASTER].[Avanti].[dbo].[InventoryLocations](LocItemNumber, WareHouse, Aisle, Slot, locLevel, Bin, Extra, RollNumber, LocQtyOnHand, SkidNumber)
            SELECT @item, 'F', 'L', 'E', 'X', 'O', @seq, @seq, @qty, @seq
            FROM FI_CurrentReceiptData CR
我不知道为什么您希望它在不同的行之间有所不同,但无论如何都不会。也许您想引用某个列而不是某个变量



正如您在注释中所说,这些变量正在光标中更新,您的
SELECT
可能正在从FI_CurrentReceiptData
返回多行
。注释掉Insert并查看结果,看看返回了多少行。或者完全从FI_CurrentReceiptData CR
中删除
,因为
SELECT
不使用任何内容。

您可以显示表的模式,还是完全按照约束定义中所示?您还可以显示确切的
INSERT
语句吗(或者它不包括列名)?请注意,约束冲突可能不是由于插入的两行中的冲突造成的,但表中可能已经存在一个或两个键组合。LocItemNumber是表的主键吗?您的
values
子句现在与表结构无关。什么是真正失败的代码?@jamesjohnson-不,请参见表schema。第七和第八个也不同。那不是真的,第七和第八个也不同。我假设insert语句中的第一列实际上没有在约束中定义。原始版本显示第7和第8个字段也不同。@Adrian-好的,根据约束,哪些数据无效?我对更改一些输入数据没有问题,我只是试图满足现有的表。我不会使用所有这些字段。?如果查看编辑的历史记录,则第7个和第8个值从一开始就不同,因此您认为前9个值在
INSERT
s中都相同的假设在编辑之前也不正确:-(@KM-否,插入之前的表中没有locItemNumber的'MW1'。您对问题的编辑显示表中有许多列,但您只给出了插入的一半,列列表在哪里?插入语句在游标内(如我的编辑中所述)。很可能您的
SELECT
正在从FI_CurrentReceiptData
返回多行
。注释掉插入内容并查看结果……或者表中已经显示了一个或多个键组合。我认为OP关注的是从光标出来的数据,而不是将其与已读取的数据进行比较“表中的y”。@Martin Smith-我在代码修订中迷失了方向。select是以前的版本,显然我需要在游标中使用实际值子句。我发布Values子句的唯一原因是发布表(即使是小表)确实很痛苦。”因此,+1,很高兴终于看到了实际的代码。如果变量是从同一个表上的游标填充的,那么可能就不应该有FROM。-这不能违反约束,因为该表已经有许多相同的记录,但约束中只有一个字段。