数据库通常是非常可定制的,具有不同的数据类型和自定义长度。
这让我感到惊讶,因为我试图寻找语法来使用unsigned int
它们在 PostgreSQL 和 MS SQL Server 中都不可用的类型。MySQL 和 Oracle 似乎都可以。
这对他们来说似乎是一个明显的遗漏 - 下一个最佳性能选项是 long/bigint,(8 字节整数),但可能完全没有必要!有谁知道为什么他们会选择不包含本机 unsigned int 支持?
我正在使用一个已经存在的“查找”样式表,它在 Microsoft SQL Server 2012 中有一个复合主键(不是我的设计)。我想在另一个表中向它添加一个外键,但只有一个单列,我正在寻找一种解决方法,无论多么不合理(基于 CLR 的自定义库或 dll 劫持,甚至),只是为了看看需要做多少。
下面是一个例子:
CREATE TABLE dbo.Lookup (
FieldName VARCHAR(100) NOT NULL,
Value VARCHAR(100) NOT NULL,
PRIMARY KEY (FieldName, Value)
)
INSERT INTO Lookup (FieldName, Value)
SELECT 'This', 'A' UNION ALL
SELECT 'This', 'B' UNION ALL
SELECT 'That', 'A'
CREATE TABLE dbo.OtherTable (
ID INT PRIMARY KEY IDENTITY(1,1),
Blah VARCHAR(100)
)
ALTER TABLE dbo.OtherTable WITH CHECK ADD CONSTRAINT [FK__OtherTable__Blah]
FOREIGN KEY(Blah) REFERENCES Lookup (Value)
--Cannot create this:
--"There are no primary or candidate …
Run Code Online (Sandbox Code Playgroud)