【发布时间】:2014-07-24 04:45:51
【问题描述】:
如何在外键字段中插入包含下划线的数据? 例如。 这有效:
INSERT INTO [childTable] (1, 'ABC')
但这不起作用:
INSERT INTO [childTable] (1, '_ABC')
当它得到这个错误时:
"The INSERT statement conflicted with the FOREIGN KEY constraint "FK_childTable_parentTable". The conflict occurred in database "X", table "parentTable", column 'SomeField'".
我们有两个通过外键关联的表:
CREATE TABLE parentTable (
Id int,
SomeField [char] (4)
)
CREATE TABLE childTable (
SomeField [char] (4)
)
ALTER TABLE childTable CONSTRAINT FK_childTable_parentTable
FOREIGN KEY SomeField
REFERENCES parentTable (SomeField)
并且 parentTable 肯定包含带有“_ABC”数据的记录。
如果我暂时移除或禁用外键约束,我可以插入记录OK,恢复外键OK,但是有没有办法转义下划线或其他更好的解决方案?
环境:SQL Server Management Studio 针对 Microsoft SQL Server 2008 R2 服务器和数据库,排序顺序设置为 Latin1_General_BIN。
【问题讨论】:
-
为父表定义一个主键,并且具有 '_ABC' 的父表应该允许将该值插入到引用父表的子表中
-
如果您删除下划线。工作正常吗?
-
如果从父子记录中删除下划线 - 是的,它工作正常。
-
语句 INSERT INTO [childTable] (1, '_ABC') 和 CREATE TABLE childTable (SomeField [char] (4)) 不一致(2 列与 1 列)。并且提供的语法也是错误的。看起来实际上您有不同的数据库模式。所以讨论当前的没有意义。附言从理论上讲,下划线可以有不同的二进制表示(例如对于 Unicode),因此它与您的二进制排序规则一起使用是错误的。
标签: sql-server