そのインスタンスのすべてのデータベースがアクセスできる場所にテーブルを追加することは可能ですか?
ありがとう
「メイン」データベースを作成し、その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)
編集: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;