我正在尝试在极大的缓存数据库中搜索与特定文本字符串匹配的列。在T-SQL中,我们可以简单地查询sys.columns视图,然后将其连接到sys.tables,以获取所有具有与我们正在查找的文本相匹配的列的表的名称。
SELECT b.name AS table_name, a.name AS column_name
FROM sys.columns a
INNER JOIN sys.tables b ON a.object_id = b.object_id
WHERE b.type = 'U' AND a.name LIKE '%SEARCHTEXT%'
我尝试过查询%DICTIONARY.COMPILEDPROPERTY
,但我还没想出如何将结果集限制为用户定义的类。是否有特定属性会根据需要限制结果集?也许是班级名称上的模式?
答案 0 :(得分:3)
此查询:
SELECT
parent AS class,
parent->SqlQualifiedNameQ As table_name,
name AS property
FROM %Dictionary.CompiledProperty
WHERE NOT parent->id %STARTSWITH '%'
在%SYS
/ SAMPLES
/ DOCBOOK
之外的每个命名空间中执行将返回用户定义的表(系统表以%
开头,用户不应使用以{开头的表名称{1}})
答案 1 :(得分:1)
你有什么版本的Caché?
从2015.1开始,您可以使用INFORMATION_SCHEMA架构
public static class StringExtensions {
public static Stream ToStream(this string s) {
return s.ToStream(Encoding.UTF8);
}
public static Stream ToStream(this string s, Encoding encoding) {
return new MemoryStream(encoding.GetBytes(s ?? ""));
}
}
INFORMATION_SCHEMA中的表的完整列表位于类参考http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=%25SYS&PACKAGE=1&CLASSNAME=INFORMATION.SCHEMA
中