Sql 查找包含具有指定名称的表的所有ERD

Sql 查找包含具有指定名称的表的所有ERD,sql,sql-server,sql-server-2012,erd,Sql,Sql Server,Sql Server 2012,Erd,我是否可以查询所有ERDs实体关系图的名称,其中包含名为的表 Like '%mytable%' 大概是这样的: select * from <ERD objects> where tableName like '%%' 事实上,我有一个包含大量ERD的大型数据库。因此,要了解表的范围,我想浏览该特定表的ERD。据我所知,您需要数据库图表中包含的表列表。你可以帮我。我将在此处添加部分内容: 图表本身存储在二进制字段中。你不可能毫无困难地把它转换成可读的形式。为了反序列化这个名为

我是否可以查询所有ERDs实体关系图的名称,其中包含名为的表

Like '%mytable%'
大概是这样的:

select * 
from <ERD objects> 
where tableName like '%%'

事实上,我有一个包含大量ERD的大型数据库。因此,要了解表的范围,我想浏览该特定表的ERD。

据我所知,您需要数据库图表中包含的表列表。你可以帮我。我将在此处添加部分内容:

图表本身存储在二进制字段中。你不可能毫无困难地把它转换成可读的形式。为了反序列化这个名为definition的字段,我们需要两个函数:

CREATE FUNCTION [dbo].[Tool_VarbinaryToVarchar_Text]
(
    @VarbinaryValue VARBINARY(max),
    @bitASCIIOnly   BIT = 0
)
RETURNS VARCHAR(max) AS
BEGIN
DECLARE @NumberOfBytes  INT

SET @NumberOfBytes = DATALENGTH(@VarbinaryValue)
-- PART ONE --
IF (@NumberOfBytes > 4)
BEGIN
    DECLARE @FirstHalfNumberOfBytes INT
    DECLARE @SecondHalfNumberOfBytes INT
    SET @FirstHalfNumberOfBytes  = @NumberOfBytes/2
    SET @SecondHalfNumberOfBytes = @NumberOfBytes - @FirstHalfNumberOfBytes
    -- Call this function recursively with the two parts of the input split in half
    RETURN dbo.Tool_VarbinaryToVarchar_Text(CAST(SUBSTRING(@VarbinaryValue, 1                           , @FirstHalfNumberOfBytes)  AS VARBINARY(max)),@bitASCIIOnly)
         + dbo.Tool_VarbinaryToVarchar_Text(CAST(SUBSTRING(@VarbinaryValue, @FirstHalfNumberOfBytes+1 , @SecondHalfNumberOfBytes) AS VARBINARY(max)),@bitASCIIOnly)
END

IF (@NumberOfBytes = 0)
BEGIN
    RETURN ''   -- No bytes found, therefore no 'hex string' is returned
END

-- PART TWO --
DECLARE @HighByte       INT
-- @NumberOfBytes <= 4 (four or less characters/8 hex digits were input)
--                       eg. 88887777 66665555 44443333 22221111
-- We'll process ONLY the right-most (least-significant) Byte, which consists
-- of eight bits

-- 2. Carve off the rightmost eight bits/single hex digit (ie 22221111)
--    Divide by 16 does a shift-left (now processing 2222)
SET @HighByte = CAST(@VarbinaryValue AS INT) & 255
IF @bitASCIIOnly = 1 AND (@HighByte < 32 OR @HighByte > 126) SET @HighByte=13;

-- 3. Trim the byte (two hex values) from the right (least significant) input Binary
--    in preparation for further parsing
SET @VarbinaryValue = SUBSTRING(@VarbinaryValue, 1, (@NumberOfBytes-1))

-- 4. Recursively call this method on the remaining Binary data, concatenating the text 
--    'value' we just decoded as their ASCII character representation
--    ie. we pass 88887777 66665555 44443333 back to this function, adding X to the result string
RETURN dbo.Tool_VarbinaryToVarchar_Text(@VarbinaryValue,@bitASCIIOnly) + 

CHAR(@HighByte)
END
例如,我创建了diagram TestDiagram,其中包含两个名为where和IE_Stat的表。在返回查询中:

根入口pFobCompobj_!$%&'*+,-。123456789:}5n]4o[\0V?[-i???V?[?i、T、、4-BHUU941xV4xDBOIE\u StatmSoft DDS表单2.0嵌入式对象9Q&sch\u标签可访问的活动视图模式1 TableViewMode:0:4,0,28DdsStreamSchema UDV Default和/DSREF-SCHEMA-CONTENTS,0模式UDV Default Post V66;4,02310,11890,51260 TableViewMode:12,0284,02805 TableViewMode:22,0284,02310 TableViewMode:32,0284,02310 TableViewMode:4>4,0,284,02310,122730,111680ActiveTableViewMode 1 TableViewMode:0:4,0284,02310,11890,51260 TableViewMode:12,0284,02805 TableViewMode:22,0284,02310 TableViewMode:32,0284,02310 TableViewMode:4>4,0284,02310,122730,111680NAQW9 LHEData源=***;初始目录=测试;集成安全性=真;多活动结果集=假;信任服务器证书=True;数据包大小=4096;应用程序名称=Microsoft SQL Server Management StudioTestDiagram&whateverdbo$IE_StatdbokE7d2pN{1634CDD7-0888-42E3-9FA2-B6D32563B91D}bR


您可以看到这两个表名。

使用信息\u schema.tables视图在使用表的位置找不到ERD名称。ERD是什么?请查看此处,了解如何改进问题。您的问题令人困惑。ERD表示实体关系图。您需要搜索所有数据库或只搜索一个特定数据库?谢谢您的回答,但我找不到该表的名称ERD一张桌子的地方。一张桌子可以使用多个ERD。起初我误解了你。现在我更改了我的答案。请看一看。非常感谢。这真的帮助了我。
CREATE FUNCTION [dbo].[fnTool_ScriptDiagram2005_Text]()
RETURNS 
@tblOut TABLE 
(
    -- Add the column definitions for the TABLE variable here
    diagramname     NVARCHAR(128), 
    diagram_id      INT PRIMARY KEY,
    diagram_text    VARCHAR(MAX),
    diagram_ASCII   VARCHAR(MAX)
)
AS
BEGIN
    DECLARE @name           NVARCHAR(128);
    DECLARE @diagram_id     INT;
    DECLARE @index          INT;
    DECLARE @size           INT;
    DECLARE @chunk          INT;
    DECLARE @line           VARCHAR(MAX);
    DECLARE @lineASC        VARCHAR(MAX);
    DECLARE @CurrentPos     INT;
    SELECT @CurrentPos = MIN(diagram_id) FROM dbo.sysdiagrams;

    WHILE (@CurrentPos IS NOT NULL)
    BEGIN
        -- Set start index, and chunk 'constant' value
        SET @index = 1;     -- 
        SET @chunk = 32;    -- values that work: 2, 6
                            -- values that fail: 15,16, 64

        SELECT  @diagram_id = diagram_id,
                @size = DATALENGTH(definition),
                @name = name
          FROM dbo.sysdiagrams 
         WHERE diagram_id = @CurrentPos;

        -- Now with the diagram_id, do all the work

        SET @line = '';
        SET @lineASC = '';
        WHILE @index < @size
        BEGIN
            -- Output as many UPDATE statements as required to append all the diagram binary
            -- data, represented as hexadecimal strings
            SELECT  @line = @line + dbo.Tool_VarbinaryToVarchar_Text(SUBSTRING (definition, @index, @chunk),0),
                    @lineASC = @lineASC + dbo.Tool_VarbinaryToVarchar_Text(SUBSTRING (definition, @index, @chunk),1)
              FROM  dbo.sysdiagrams 
             WHERE  diagram_id = @CurrentPos;

            SET @index = @index + @chunk;
        END
        INSERT INTO @tblOut (diagramname, diagram_id, diagram_text, diagram_ASCII)
             VALUES         (@name,      @diagram_id, @line,        REPLACE(@lineASC,CHAR(13),''));
        SELECT @CurrentPos = MIN(diagram_id)
          FROM dbo.sysdiagrams
         WHERE diagram_id > @CurrentPos;
    END
    RETURN;
END
SELECT * 
FROM [dbo].[fnTool_ScriptDiagram2005_Text] ()
WHERE diagram_ASCII LIKE '%TableToFind%'