2

SQL Server 2008にいくつかのデータベースがあります。また、いくつかのテーブルの場所を忘れたので、特定のテーブルのデータベースの場所を見つけるようなクエリがあるかどうかを確認する必要がありますか?

私はこのようなものが必要です:

SELECT DATABASE_NAME FROM SQLSERVER WHERE TABLE= "TBL_PRODUCTS"

追加:今、私は特定のビューとストアドプロシージャのデータベースの場所を知る必要があります

このようなもの:

SELECT DATABASE_NAME FROM SQLSERVER WHERE VIEW= "VW_PRODUCTS"

SELECT DATABASE_NAME FROM SQLSERVER WHERE StoredProcedure= "SP_PRODUCTS"

ありがとう!

4

2 に答える 2

3

次の手順で作業を行います。

CREATE PROCEDURE usp_FindTableNameInAllDatabase
@TableName VARCHAR(256)
AS
DECLARE @DBName VARCHAR(256)
DECLARE @varSQL VARCHAR(512)
DECLARE @getDBName CURSOR
SET @getDBName = CURSOR FOR
SELECT name
FROM sys.databases
CREATE TABLE #TmpTable (DBName VARCHAR(256),
SchemaName VARCHAR(256),
TableName VARCHAR(256))
OPEN @getDBName
FETCH NEXT
FROM @getDBName INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @varSQL = 'USE ' + @DBName + ';
INSERT INTO #TmpTable
SELECT '''+ @DBName + ''' AS DBName,
SCHEMA_NAME(schema_id) AS SchemaName,
name AS TableName
FROM sys.tables
WHERE name LIKE ''%' + @TableName + '%'''
EXEC (@varSQL)
FETCH NEXT
FROM @getDBName INTO @DBName
END
CLOSE @getDBName
DEALLOCATE @getDBName
SELECT *
FROM #TmpTable
DROP TABLE #TmpTable
GO
EXEC usp_FindTableNameInAllDatabase 'Address'
GO 

結果は次のようになります。

結果表

ソース

于 2012-08-13T14:24:12.060 に答える
2

これを行う

Use Master
Go

    select 
    'select '''+CAST(name as varchar(200))+''' from '+CAST(name as varchar(200))+'.sys.tables where name = yourTableName' 
    from sysdatabases

yourTableNameテーブルの名前に置き換え ます。' '

あなたは得るでしょうselects; 次にそれらを実行すると結果が得られます。100を超える場合はdatabases、を使用します。グリッドを作成すると、最大results to textで100しか取得されないためです。selects

于 2012-08-13T14:41:43.707 に答える