Sql server 如何使用存储过程从给定的表名中查找数据库名?
我是这里的新手。我的SSMS中有许多数据库,因此我需要使用存储过程使用给定的表名查找数据库名。 我不擅长写SP和处理错误。 我为我的英语道歉 多谢各位 我尝试在存储过程中使用游标。Sql server 如何使用存储过程从给定的表名中查找数据库名?,sql-server,tsql,stored-procedures,sql-server-2012,cursors,Sql Server,Tsql,Stored Procedures,Sql Server 2012,Cursors,我是这里的新手。我的SSMS中有许多数据库,因此我需要使用存储过程使用给定的表名查找数据库名。 我不擅长写SP和处理错误。 我为我的英语道歉 多谢各位 我尝试在存储过程中使用游标。 但是,由于我不善于处理错误,所以我会出现错误。您可以通过以下方式创建存储过程: CREATE PROCEDURE sp_Get_Tables @schema VARCHAR(50) = 'dbo', @table_name VARCHAR(100) = 'Default_Table_Name' AS
但是,由于我不善于处理错误,所以我会出现错误。您可以通过以下方式创建存储过程:
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 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”的表的数据库