【发布时间】:2021-07-16 10:14:52
【问题描述】:
我正在管理的大型 MSSQL DB 存在一些问题。 有一些我想在一个表中实现的功能。
表格看起来包含这样的列:
ID MailID
010-123456 12345678
010-123456/1 NULL
010-123456/2 NULL
010-123456/3 NULL
现在,我想要完成的是将每个 Childs MaildID 设置为与其父母 MailID 相同。
ParentID 是与“/”分隔符之前的 Child(Id ID 行)具有相同值的 ID。 此外,ID 不应包含任何字符,只能包含数字(执行“-”和“/”)。
所以目前我有这个解决方案:
Declare @MyTable table(Child varchar(MAX),Parent varchar(MAX),ParentMaildId varchar(MAX))
insert into @MyTable
select ID as Child, left(ID, charindex('/', ID)-1) AS Parent, MailID as MailID
FROM [thisismy].[dbo].[table]
where ID not like '%[a-z]%' and ID like '%/%' and MailId is not NULL
select * from @MyTable
--update t1
--SET t1.MailId = t2.ParentMaildId
--FROM [thisismy].[dbo].[table] AS t1
--INNER JOIN @IDAS t2 ON t1.ID = t2.Child
--WHERE t1.ID = t2.Child and t1.MailId is NULL
当我使用 select 语句在此处获取 MyTable 文件时,它只返回我的数据库表中所有案例的一小部分,为什么?
我希望有一个存储过程,可以自动将子级的 Mailid 更新为父级(所有需要的信息都在同一个表中)。
有没有更好的方法来做到这一点?
【问题讨论】:
-
为什么没有合适的自引用外键?而且ID真的可以2Gb吗,为什么一定要
varchar(max)
标签: sql sql-server stored-procedures