我有两个表Blobs和FileContent,它们存储文件内容。 两个表具有相同的结构:Id int IDENTITY(1,1(,Content varbinary(max( NULL, 两个表中都有数据。
我还有其他几个表,它们具有这些表的外键。 例如,表 MxdFiles 具有字段 BlobId,它是 Blobs 表的 Id 字段的外键。
现在我需要将所有记录从 Blob 移动到文件内容,并使用新的 ID 更新 MxdFiles 表
请告知如何实现这一点或提供任何链接以供阅读。
尝试这样的事情:
CREATE DATABASE TestDB
GO
USE TestDB;
GO
CREATE TABLE t1(ID INT IDENTITY PRIMARY KEY,SomeContent VARCHAR(100));
CREATE TABLE t2(ID INT IDENTITY PRIMARY KEY,SomeContent VARCHAR(100));
INSERT INTO t1 VALUES('Test1a'),('Test1b');
INSERT INTO t2 VALUES('Test2a'),('Test2b');
CREATE TABLE Referenced(ID INT IDENTITY, t1_ID INT CONSTRAINT fkTest FOREIGN KEY REFERENCES t1(ID));
INSERT INTO Referenced VALUES(1),(2); --Now both entries in t1 are referenced
--想要将所有条目从 t1 转移到 t2:
ALTER TABLE t2 ADD OldID INT;
INSERT INTO t2
SELECT t1.SomeContent,t1.ID FROM t1;
SELECT * FROM t2;
--结果:导入的行有OldID
ID SomeContent OldID
1 Test2a NULL
2 Test2b NULL
3 Test1a 1
4 Test1b 2
--切换值:
--Drop the constraint
ALTER TABLE Referenced DROP CONSTRAINT fkTest;
--Switch the references
WITH updateableCTE aS
(
SELECT r.t1_ID AS OldValue
,t2.ID AS NewValue
FROM Referenced AS r
INNER JOIN t2 ON r.t1_ID=t2.OldId
)
UPDATE updateableCTE SET OldValue=NewValue;
--Re-create the FK
ALTER TABLE Referenced ADD CONSTRAINT fkTest FOREIGN KEY (t1_ID) REFERENCES t2(ID);
SELECT * FROM Referenced;
GO
USE master;
GO
DROP DATABASE TestDB;