好的家伙是我经历的, 我有一个名为[dbo]的父表。[FileMetaData]和一个名为[dbo]的子表。[Ref_FileType] 这是对父表的引用。在子表中我只有两列,TypeId在Parent表中是FK,TypeDescription 我想在父表[dbo]中弹出TypeId列。[FileMetaData],这里是如何获得子表中的typeDescription
INSERT into [test].[dbo].[Ref_FileType] (TypeDescription)
( select Distinct RIGHT(s.FileName,4) from [test].[dbo].[FileMetadata]s
WHERE NOT EXISTS (SELECT * FROM [test].[dbo].[Ref_FileType] ))
示例是
TypeID | Type Descritption
1 xlsx
2 txt
3 TCF
现在我想在子表[dbo]中弹出父表[dbo].[FileMetaData]
并分配TypeId
。[Ref_FileType]也注意到
我从上面的insert语句中获得了TypeDescription
。所以我想要的是根据文件名中的最后4个字符插入,例如
DataValidationRules.xlsx.
如果您检查它是FileMetaData
,那么如果Fileaname
以xlsx.
结尾,我想用typeID
填充此类文件的所有1
,如果它以txt =2
等结尾
请妥善回答。
感谢。
答案 0 :(得分:0)
根据您的描述,我假设您的表结构类似于:
CREATE TABLE FileMetaData
(
FileName varchar(256) NOT NULL,
FileTypeId int NULL
);
CREATE TABLE Ref_FileType
(
TypeId int NOT NULL IDENTITY,
Description varchar(4) NOT NULL
)
表格中填充了一些数据:
INSERT INTO FileMetaData VALUES ('DataValidationRules.xlsx', NULL);
INSERT INTO FileMetaData VALUES ('Readme.txt', NULL);
INSERT INTO FileMetaData VALUES ('SomeFile.TCF', NULL);
您可以使用以下语句提取文件扩展名,使用可变长度扩展名int account:
WITH temp (Description) AS
(
SELECT DISTINCT SUBSTRING(FileName, StartPosition, LEN(FileName) - StartPosition + 2)
FROM
(
SELECT FileName, LEN(FileName) - CHARINDEX('.', REVERSE(FileName)) + 2 AS StartPosition
FROM FileMetadata
) T1
)
INSERT INTO Ref_FileType (Description)
SELECT T1.Description
FROM temp T1
LEFT JOIN Ref_FileType T2 ON T2.Description = T1.Description
WHERE T2.TypeId IS NULL;
下一步是将FileMetaData
表中的每一行与正确的文件类型相关联:
UPDATE T1
SET FileTypeId = T2.TypeId
FROM FileMetaData T1
JOIN Ref_FileType T2 ON T2.Description = SUBSTRING(FileName, LEN(FileName) - LEN(T2.Description) +1 , LEN(T2.Description));
希望这有帮助。