如何使用存储过程从给定的 table 名称中找到数据库的名称?

How to find the name of the database from the given table name, using stored procedure?

我是新手。我的 SSMS 中有很多数据库,因此我需要使用存储过程使用给定的 table 名称查找数据库名称。 而且我不擅长编写 SP 和处理错误。 我为我的英语道歉。

谢谢

我试过在存储过程中使用游标。 但是由于我不擅长处理错误,所以出现错误。

您可以在下面创建存储过程:

CREATE PROCEDURE sp_Get_Tables
    @schema VARCHAR(50) = 'dbo',
    @table_name VARCHAR(100) = 'Default_Table_Name'
AS
SELECT name 
FROM sys.databases 
WHERE CASE WHEN state_desc = 'ONLINE' THEN OBJECT_ID(QUOTENAME(name) + '.' + @schema + '.' + @table_name, 'U') END IS NOT NULL

并执行以下存储过程:

EXEC sp_Get_Names 'Schema', 'Table_Name'

试试这个:

Create PROCEDURE Pro_FindTable
(@tableName VARCHAR(MAX))
AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @name VARCHAR(MAX),
            @dbid INT;
    DECLARE C CURSOR FAST_FORWARD FOR(
    SELECT name,
           database_id
    FROM sys.databases);
    OPEN C;
    FETCH NEXT FROM C
    INTO @name,
         @dbid;
    WHILE @@FETCH_STATUS = 0
    BEGIN

        DECLARE @query NVARCHAR(MAX)
            = 'IF EXISTS(SELECT name FROM(SELECT name, COUNT(*)Over(Order By (Select Null)) as RN FROM(SELECT '''
              + @name + ''' AS name UNION ALL SELECT name FROM [' + @name
              + '].sys.tables WHERE type=''U'' AND name = ''' + @tableName
              + ''') as K)as K Where RN>1)
              Select '''+ @name + '''';

        EXEC (@query);

        FETCH NEXT FROM C
        INTO @name,
             @dbid;

    END;
    CLOSE C;
    DEALLOCATE C;

END;

并这样称呼它:

EXEC Pro_FindTable 'MyTable'

结果将是具有名为 'MyTable'

的 table 的所有数据库