2013-02-16 1 views

ответ

2

Вы можете создать базу данных «Main» и получить к нему доступ с запросами SQL из любой другой базы данных в этом экземпляре SQL Server. Это просто вопрос прав пользователя. Полный синтаксис для 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)

+0

Я не хочу создать связанный server.I хочет некоторые вещи, как системы взглядов, которые доступны из всех databses – Arian

+2

Это не привязанная сервера. Связанный сервер означает, что ваша «общая» база данных находится на другом экземпляре SQL Server. Вам не нужно настраивать что-либо дополнительно. Попробуйте. – Nenad

+1

FYI, также ссылающийся на таблицу с использованием связанного сервера, требует имени 4-х частей [LinkedServerName]. [DatabaseName]. [SchemaName]. [TableName]. Чтобы ссылаться на таблицу в другой базе данных на том же сервере, вам нужно использовать только название из 3-х частей. [DatabaseName]. [SchemaName]. [TableName] –

0

Edit: я добавил второе решение.

Первое решение Вы можете попробовать использовать undocummented системную процедуру 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 
'; 

Второе решение Вы можете сгенерировать 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 (панель результатов перехода к тексту l), 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; 
+0

Нет, пожалуйста, прекратите рекомендовать 'sp_msforeachdb'. Он недокументирован, неподдерживается и полностью нарушен ([и Microsoft не исправляет его] (http://connect.microsoft.com/SQLServer/feedback/details/752629/disable-sp-msforeachdb-by-default-or-fix- Это)). См. Http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx и http://www.mssqltips.com/sqlservertip/2201/make-a-more-reliable-and-flexible-spmsforeachdb/ –

+0

@AaronBertrand: Спасибо за ваш комментарий. Я иногда использую эту хранимую процедуру для специальных задач. Да, это не документировано, я написал. Он пропускает некоторые базы данных: да. Вот почему я написал второй 'sp_msforeachdb'. Для других проблем я использую транзакции: 'BEGIN TRANSACTION; ... sp_for ... ROLLBACK/COMMIT; '. Для 'dbo.ForEachDB_MyWay' будет приятно видеть предупреждение при пропусках только для чтения/не в онлайн-базах данных. –

+0

@AaronBertrand: Я добавил второе решение. Спасибо. –