在表名中搜索通配符字符

8 浏览
0 Comments

在表名中搜索通配符字符

在我的数据库中,我创建了一些表,这些表的名称中间包含\'_\'字符,我想找到所有这些表。\n例如:\nDoc_Amit,Doc_Raj,chem_Man等\n我知道查找表名的查询如下:\nselect * from sys.tables where name like \'%%\'\n但我的问题是,在%和%之间我应该写什么,这样我只能获取包含通配符字符\'_\'的表名?\n注意:我正在使用SQL Server 2012

0
0 Comments

问题:在表名中搜索通配符字符的原因和解决方法

在编写SQL查询时,有时候需要在表名中使用通配符字符来进行模糊搜索。然而,使用通配符字符可能会导致一些问题,因为这些字符在SQL中具有特殊的含义。

原因:

使用通配符字符在表名中进行搜索可能会导致错误,因为SQL解析器会将这些字符解释为特殊的操作符或通配符。这可能会导致查询无法正常执行或返回错误的结果。

解决方法:

为了在表名中使用通配符字符进行搜索,可以使用转义字符来指示SQL解析器将其作为普通字符处理。在SQL Server中,可以使用下划线(_)作为转义字符。

以下是一个示例查询,用于在表名中搜索包含通配符字符的表名:

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

在该查询中,使用了LIKE操作符和%通配符来指示SQL解析器搜索任意字符。而在通配符字符之前加上了下划线(_)作为转义字符,以确保通配符字符被视为普通字符。

通过使用上述查询,可以在表名中搜索包含通配符字符的表名,而不会受到SQL解析器的特殊解释和影响。这样可以确保查询能够正确执行,并返回正确的结果。

在表名中搜索通配符字符时,需要注意SQL解析器对这些字符的特殊处理。为了解决这个问题,可以使用转义字符来指示SQL解析器将通配符字符视为普通字符。在SQL Server中,可以使用下划线(_)作为转义字符来搜索包含通配符字符的表名。通过正确使用转义字符,可以确保查询能够正常执行并返回正确的结果。

0
0 Comments

搜索通配符在表名中的原因是为了查找表名中包含特定字符的表。在这个例子中,使用了LIKE操作符和通配符%,以便在sys.objects系统视图中查找表名中包含下划线字符的表。为了避免下划线字符被当作通配符解释,还使用了ESCAPE关键字,并指定了一个转义字符\。

解决方法是使用sys.objects系统视图进行查询,并添加一个过滤条件,以限制表的类型为用户表(U)。这样可以得到所需的结果。

另外,还提到了一种替代的方法,即使用sys.tables系统视图来代替sys.objects进行查询。虽然sys.tables是一个目录视图而不是一个系统表,但在某些情况下,使用sys.tables可以提高查询性能。同时,还提到了使用SCHEMA_NAME()函数来替代sys.schemas表的连接,以简化代码。

最后,还有关于性能优化的讨论。一方面,有人认为在元数据查询中节省几毫秒的时间并不重要,应该将性能优化的重点放在真正的查询上。另一方面,也有人认为如果能够提高查询的速度,即使只是几毫秒的差距,也是值得的。

搜索通配符在表名中的原因是为了查找特定字符的表,解决方法是使用sys.objects系统视图进行查询并添加适当的过滤条件。同时还提到了一种替代方法和关于性能优化的讨论。

0