【发布时间】:2020-11-19 13:26:23
【问题描述】:
我有一个来自 sys 表的 sql 对象列表,假设其中有 14,000 个,我需要确定应该分配哪个团队来审查它们以进行数据规范化项目。我们还将继续实施正确的命名约定。目前,它尚未正确实施,从而导致我面临的问题。
举个例子:
drop table if exists #origin;
create table #origin ( objectName varchar (40) not null );
insert into #origin ( objectName )
values ( 'FoTacoTruck' )
, ( 'FooHappyForest' )
, ( 'gseBAN' )
, ( 'gse_dt_Primer' )
, ( 'gse_sparkles' );
drop table if exists #assignments;
create table #assignments ( objectPrefix varchar (10) not null, team_name varchar (20) not null );
insert into #assignments ( objectPrefix, teamName )
values ( 'Fo', 'Team Edward' )
, ( 'Foo', 'Team Jacob' )
, ( 'gse', 'Team Steve' )
, ( 'gse_dt', 'Team Sabrina' );
select o.objectname
, a.team_name
from #assignments a
join #origin o on o.objectName like ( concat( a.objectPrefix, '%' ));
目前,这会产生以下结果:
objectName | teamName
=================================
FoTacoTruck | Team Edward
FooHappyForest | Team Edward
FooHappyForest | Team Jacob
gseBan | Team Steve
gse_dt_Primer | Team Steve
gse_sparkles | Team Steve
gse_dt_Primer | Team Sabrina
由于使用了通配符,我很难弄清楚如何让这些名称起作用。目前,这些对象并非都使用ObjectPreFix_ 指定,它们将在未来使用,允许我使用 charindex 或 regex 进行解析。
我不能子字符串,因为不总是有正确数量的字符...我不能使用 charindex 因为并不总是有一个分隔符来引用...我还没弄清楚如何使用任何 patindex,但认为这可能是关键的一部分。而且,不幸的是,我什至无法弄清楚该谷歌帮助看看是否还有其他类似的问题。
我可以控制的:
- #assignments 表
- 用于分配的查询
我无法控制的:
- #origin 表,因为它完全基于 sys 表中的对象名称,并且在此处显示为临时表以简化代码
Tl;DR:当没有可识别的(由我)模式时,如何让 objectPrefix 与 objectName 匹配?
【问题讨论】:
标签: sql-server tsql ssms sql-server-2016