我是新手。我的SSMS中有许多数据库,因此我需要使用存储过程使用给定的表名来查找数据库名。 而且我也不擅长编写SP和处理错误。 我为我的英语道歉。
谢谢
我在存储过程中使用游标进行了尝试。 但是我遇到了错误,因为我不善于处理错误。
答案 0 :(得分:1)
您可以在下面创建存储过程:
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'
答案 1 :(得分:0)
尝试一下:
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”的表的数据库