0

そのインスタンスのすべてのデータベースがアクセスできる場所にテーブルを追加することは可能ですか?

ありがとう

4

2 に答える 2

2

「メイン」データベースを作成し、そのSQLServerインスタンス内の他のデータベースからのSQLクエリを使用してアクセスできます。それはユーザーの特権の問題です。の完全な構文はtable_or_view_nameですdatabase.schema.object_name

SELECT * FROM mytable AS t
INNER JOIN Main.dbo.SharedTable AS s ON t.Id=s.Id
....

Chackのドキュメントも-FROM (Transact-SQL)

于 2013-02-16T10:46:25.667 に答える
0

編集:2番目のソリューションを追加しました。

最初の解決策文書化されていないシステム プロシージャsp_msforeachdbを使用してみてください。

EXEC sp_msforeachdb @command1=N'
USE ?;
IF ''?'' NOT IN (''master'',''model'',''tempdb'',''msdb'',''ReportServer'',''ReportServerTempDB'')
    BEGIN
    CREATE TABLE CocoJamboTable (
        ID INT IDENTITY PRIMARY KEY,
        FirstName NVARCHAR(50) NOT NULL,
        LastName NVARCHAR(50) NOT NULL
    );
END
';

EXEC sp_msforeachdb @command1=N'
USE ?;
IF ''?'' NOT IN (''master'',''model'',''tempdb'',''msdb'',''ReportServer'',''ReportServerTempDB'')
BEGIN
    SELECT  DB_NAME() AS DbName, name AS TableName, object_id FROM ?.sys.tables 
    WHERE   name=''CocoJamboTable''
END
';

2 番目の解決策すべてのステートメントを含むT-SQLスクリプトを生成できます。CREATE TABLE

SET NOCOUNT ON;

PRINT 'BEGIN TRAN;'
/*
SELECT  
    'USE ' 
    + QUOTENAME(db.name) 
    + ';'
    + '
    CREATE TABLE CocoJamboTable (
        ID INT IDENTITY PRIMARY KEY,
        FirstName NVARCHAR(50) NOT NULL,
        LastName NVARCHAR(50) NOT NULL
    );'
    + CHAR(13)
*/
SELECT  
    CASE 
        WHEN db.name IN ('master','model','tempdb','msdb','ReportServer','ReportServerTempDB','ASPNETDB')
            THEN '-- Explicit skipping: '   + QUOTENAME(db.name)
        WHEN db.state <> 0 
            THEN '-- Implicit skipping (not online): '  + QUOTENAME(db.name)
        WHEN db.is_read_only=1
            THEN '-- Implicit skipping (read only): '   + QUOTENAME(db.name)                
        --WHEN other filter
        --  THEN '-- Implicit skipping (my filter): '   + QUOTENAME(db.name)                
        ELSE 
            'CREATE TABLE ' + QUOTENAME(db.name) + '.dbo.CocoJamboTable (
                ID INT IDENTITY PRIMARY KEY,
                FirstName NVARCHAR(50) NOT NULL,
                LastName NVARCHAR(50) NOT NULL
            );'
        END 
        + CHAR(13)
FROM    sys.databases db
ORDER BY db.name;

PRINT 'ROLLBACK;'
PRINT '-- COMMIT;'

次に、Ctrl+T (テキスト結果)、F5 (実行)、F6 (テキスト結果パネルにジャンプ)、Ctrl+A (すべて選択)、Ctrl+C (コピー)、Ctrl+N (新しいウィンドウ)、Ctrl+ V (貼り付け - 前のステップで生成されたスクリプトを貼り付けます)、F5 (実行)。

サンプルT-SQLスクリプト:

BEGIN TRAN;

CREATE TABLE [Comisioane].dbo.CocoJamboTable (
                ID INT IDENTITY PRIMARY KEY,
                FirstName NVARCHAR(50) NOT NULL,
                LastName NVARCHAR(50) NOT NULL
            );

-- Implicit skipping (read only): [Credite]

-- Explicit skipping: [master]

-- Explicit skipping: [model]

-- Explicit skipping: [msdb]

-- Explicit skipping: [ReportServer]

-- Explicit skipping: [ReportServerTempDB]

CREATE TABLE [SIMUR4].dbo.CocoJamboTable (
                ID INT IDENTITY PRIMARY KEY,
                FirstName NVARCHAR(50) NOT NULL,
                LastName NVARCHAR(50) NOT NULL
            );

ROLLBACK;
-- COMMIT;
于 2013-02-16T12:46:04.700 に答える