您不能轻易做到这一点,因为在 SQL Server 中,列数据类型必须匹配才能创建外键。但是,有一个(相当讨厌和复杂的)解决方法。您可以在 SQL Server 中为任何具有 UNIQUE 约束的列创建外键。因此,您可以执行以下步骤:
选项1
(更好,如评论中所建议)
ALTER TABLE dbo.Table1 ADD ID_Text AS CAST(ID AS varchar(36)) PERSISTED UNIQUE
GO
然后您可以为此列设置外键。
选项 2
(我的原创,不太好)
ALTER TABLE dbo.Table1 ADD ID_Text varchar(36) NULL
GO
UPDATE dbo.Table1 SET ID_Text = CAST(ID AS varchar(36))
GO
ALTER TABLE dbo.Table1 ALTER COLUMN ID_Text varchar(36) NOT NULL
GO
ALTER TABLE dbo.Table1 ADD CONSTRAINT U_ID_Text UNIQUE (ID_Text)
GO
然后,为了确保ID_Text
保持填充状态,您需要一个INSTEAD OF
插入触发器:
CREATE TRIGGER TI_Table1_ID_Text
ON dbo.Table1
INSTEAD OF INSERT
AS
SET NOCOUNT ON
INSERT dbo.Table1
(ID, ID_Text, OtherFields)
SELECT ID, CAST(ID AS varchar(36)), OtherFields
FROM inserted
SET NOCOUNT OFF
GO
在这里,替换OtherFields
为 ... er ... 您的其他字段。
ID_Text
然后,除了可以从列创建外键之外,您可以忘记新字段MID
。