添加具有相同数字但前导 0 的新行时使用 nvarchar 出现重复键错误
Duplicate key error using nvarchar when adding new row with same number but leading 0
我想在 table 中插入一行,其中主键列的值为 3719
。但是,在同一个 table 中,我想使用 03719
添加详细信息,但出现错误:
The duplicate key value is (3719).
该列的数据类型是 nvarchar。
我认为您的问题是因为您忘记将要插入的字符串值用单引号引起来,因此它被视为数字,自动转换为 nvarchar
。
INSERT INTO Table (Column) VALUES (03719)
等同于
INSERT INTO Table (Column) VALUES (3719)
值(由于列类型)然后转换为字符串 '3719'
。当然你会得到一个重复的密钥错误。
检查引号。如果您从应用程序调用它,使用参数化查询!
插入记录的正确语句如
Create table test (id nvarchar(25) primary key, name varchar(20))
insert into test values('111','hello')
insert into test values('0111','hello')
select * from test
您忘记添加引号了。
如果你不加引号,你会得到下面的错误
Violation of PRIMARY KEY constraint 'PK__test__3213E83F2C904DEB'.
Cannot insert duplicate key in object 'dbo.test'. The duplicate key value is (111).
我想在 table 中插入一行,其中主键列的值为 3719
。但是,在同一个 table 中,我想使用 03719
添加详细信息,但出现错误:
The duplicate key value is (3719).
该列的数据类型是 nvarchar。
我认为您的问题是因为您忘记将要插入的字符串值用单引号引起来,因此它被视为数字,自动转换为 nvarchar
。
INSERT INTO Table (Column) VALUES (03719)
等同于
INSERT INTO Table (Column) VALUES (3719)
值(由于列类型)然后转换为字符串 '3719'
。当然你会得到一个重复的密钥错误。
检查引号。如果您从应用程序调用它,使用参数化查询!
插入记录的正确语句如
Create table test (id nvarchar(25) primary key, name varchar(20))
insert into test values('111','hello')
insert into test values('0111','hello')
select * from test
您忘记添加引号了。 如果你不加引号,你会得到下面的错误
Violation of PRIMARY KEY constraint 'PK__test__3213E83F2C904DEB'.
Cannot insert duplicate key in object 'dbo.test'. The duplicate key value is (111).