【问题标题】:Search Wild card characters in Table name [duplicate]在表名中搜索通配符 [重复]
【发布时间】:2013-04-15 12:11:54
【问题描述】:

在我的数据库中,我创建了一些名称中间包含“_”字符的表,我想找到所有表。
例如:

Doc_Amit,Doc_Raj,chem_Man etc

我知道查找表名的查询如下:

select * from sys.tables where name like '%%'

但我的问题是我应该在 % 和 % 之间写什么,这样我才能得到包含通配符“_”的表名??

注意:我使用的是 SQL Server 2012

【问题讨论】:

  • 你可以使用name like '%[_]%'
  • @praveen: 是的,你是对的,我们需要使用方括号将“_”标识为搜索字符
  • @OcasoProtal :是的,我检查了你的链接,这是类似的问题。我可能不明白,因为我使用了不同的词!

标签: sql sql-server database


【解决方案1】:

试试这个 -

SELECT s.name + '.' + o.name
FROM sys.objects o
JOIN sys.schemas s ON o.[schema_id] = s.[schema_id]
WHERE o.name LIKE  '%\_%' ESCAPE '\'
    AND o.[type] = 'U'

评论回答-

    SELECT * 
    FROM sys.objects o

    -> 

ALTER VIEW sys.objects AS
    SELECT *
    FROM sys.objects$

    -----------------------------

    SELECT * 
    FROM sys.tables t

    ->

ALTER VIEW sys.tables AS
    SELECT *
    FROM sys.objects$ o
    LEFT JOIN sys.sysidxstats lob ON lob.id = o.object_id AND lob.indid <= 1
    LEFT JOIN sys.syssingleobjrefs ds ON ds.depid = o.object_id AND ds.class = 8 AND ds.depsubid <= 1   -- SRC_INDEXTOLOBDS 
    LEFT JOIN sys.syssingleobjrefs rfs ON rfs.depid = o.object_id AND rfs.class = 42 AND rfs.depsubid = 0   -- SRC_OBJTOFSDS
    LEFT JOIN sys.syspalvalues ts ON ts.class = 'LEOP' AND ts.value = o.lock_escalation_option
    WHERE o.type = 'U'

【讨论】:

  • 我迂腐的一面要提一下 sys.tables 是目录视图,而不是系统表。
  • 我简单地为存储在数据库中的系统对象添加描述。所以现在你可以看到 sys.tables 有很多连接。通常,我在返回 1 行时使用 SCHEMA_NAME(),在我们的例子中可能返回很多行,所以最好使用 sys.schemas 进行连接。
  • 您正在执行元数据查询。如果它在 22 毫秒或 28 毫秒内返回,你真的在​​乎吗?
  • 是的,我关心每一毫秒:)。因此,如果可以更快地提出请求 - 这是可取的。 Нope 我帮你了。
  • 好吧,如果你想浪费几分钟节省几毫秒一次,那就继续吧。我会将性能调优工作重点放在实际查询上,而不是一次性管理/元数据。
【解决方案2】:

我得到了最简单的答案,而且更简单!

select * from sys.objects where name like '%[_]%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2022-01-07
    • 2014-10-26
    相关资源
    最近更新 更多