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
ここで、 ...えー...他のフィールドに置き換えます。
次に、列から新しいフィールドへID_Text
の外部キーを作成できるという事実を除けば、新しいフィールドを忘れることができます。MID