2008-09-24 2 views
50

Если мне нужно скопировать хранимую процедуру (SP) с одного SQL Server на другой, я нажимаю правой кнопкой мыши на SP в SSMS и выбираю Script Stored Procedure как> CREATE to> New Query Editor Window. Затем я меняю соединение, щелкнув правой кнопкой мыши на этом окне и выбрав Connection> Change Connection ..., а затем выбрав новый сервер и F5, чтобы запустить создание на новом сервере.Что такое синтаксис T-SQL для подключения к другому SQL Server?

Так что мой вопрос: «Что такое синтаксис T-SQL для подключения к другому SQL Server?» так что я могу просто вставить это в начало скрипта create и F5 для его запуска, и он переключится на новый сервер и запустит скрипт create.

Набрав вопрос, я понял, что если бы я дал вам почву тому, что я пытаюсь сделать, вы можете быстрее и лучше прийти от меня, чтобы выполнить это.

ответ

47

Кроме того, убедитесь, что когда вы пишете запрос с участием связанного сервера, вы включите скобки, как это:

SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table] 

я нашел что, по крайней мере, в 2000/2005 годах необходимы скобки [], по крайней мере, вокруг имени сервера.

2

Попробуйте создать связанный сервер (который вы можете сделать с sp_addlinkedserver), а затем с помощью OPENQUERY

+0

Wayne - если я правильно понимаю ваше предложение, то это выполняет SP, находящийся на сервере1 на сервере2, правильно? Он не создает тот же SP на сервере server2? – Guy 2008-09-24 04:54:35

+0

Он выполняет sp на сервере1, который открывает ссылку на server2. Затем вы можете выполнить pasa через запрос или вызвать что-то на сервере2. – Wayne 2008-09-24 05:08:46

27

Update: для подключения к другому серверу SQL и выполнения SQL заявления, вы должны использовать sqlcmd Utility. Обычно это делается в пакетном файле. Вы можете комбинировать это с xmp_cmdshell, если хотите выполнить его в студии управления.


Один из способов - установить linked server. то вы можете добавить связанный сервер и имя базы данных к имени таблицы. (Выберите * из linkedserver.database.dbo.TableName)

USE master 
GO 
EXEC sp_addlinkedserver 
    'SEATTLESales', 
    N'SQL Server' 
GO 
+0

На самом деле это правильный ответ на конкретный вопрос. Вернее, сначала убедитесь, что другой сервер связан и поэтому доступен для запроса, тогда вы можете выбрать другой сервер, как объясняет Codewerks. – mahalie 2011-01-21 01:40:33

5

Если бы я перефразировал вопрос - можно ли выбрать контекст сервера для выполнения запроса в DDL - ответ - нет. С помощью USE можно программно выбирать только контекст базы данных. (уже предварительно выбранный контекст сервера)

Связанный сервер и OPEN QUERY могут предоставить доступ к DDL, но требуют некоторого перезаписи вашего кода для инкапсуляции в виде строки, что затрудняет разработку/отладку.

Альтернативно вы можете прибегнуть к внешней программе драйвера для загрузки файлов SQL для отправки на удаленный сервер через OPEN QUERY. Однако в большинстве случаев вы могли бы также подключиться к серверу непосредственно в 1-м месте, чтобы оценить DDL.

0

Если возможно, проверьте SSIS (службы интеграции SQL Server). Я просто устаю от этого инструментария, но уже зацикливаюсь на более 40 серверах и готовлюсь к разложению всех видов хаоса;)

+1

Это не отвечает на его вопрос. – 2013-12-05 01:24:48

73

В SQL Server Management Studio включите режим SQLCMD из меню Query. Затем в верхней части вашего скрипта, введите команду ниже

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password] 

При подключении к нескольким серверам, не забудьте вставить GO между соединениями; otherwise your T-SQL won't execute on the server you're thinking it will.

+3

Если вы подключаетесь к нескольким серверам, перед переключением серверов вы должны добавить «GO», или ваши SQL-запросы будут выполняться с неправильным сервером. http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx – 2014-04-07 15:59:06

4

Всякий раз, когда мы пытаемся получить любые данные с другого сервера, нам нужно выполнить два шага.

Первый шаг:

-- Server one scalar variable 
DECLARE @SERVER VARCHAR(MAX) 
--Oracle is the server to which we want to connect 
EXEC SP_ADDLINKEDSERVER @SERVER='ORACLE' 

Второго шаг:

--DBO is the owner name to know table owner name execute (SP_HELP TABLENAME)  
SELECT * INTO DESTINATION_TABLE_NAME 
FROM ORACLE.SOURCE_DATABASENAME.DBO.SOURCE_TABLE 
2

При подключении к нескольким серверам, вы должны добавить «GO» перед переключением серверов или ваши операторы будут работать против неправильный сервер.

например.

:CONNECT SERVER1 
Select * from Table 
GO 
enter code here 
:CONNECT SERVER1 
Select * from Table 
GO 

http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx

1

на моем диске С, я сначала создать текстовый файл, чтобы создать новую таблицу. Вы можете использовать то, что вы хотите в этом текстовом файле

в этом случае текстовый файл называется «Bedrijf.txt»

содержание:

Print 'START(A) create table' 

GO 1 

If not EXISTS 
(
    SELECT * 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME = 'Bedrijf' 
) 
BEGIN 
CREATE TABLE [dbo].[Bedrijf] (
[IDBedrijf] [varchar] (38) NOT NULL , 
[logo] [varbinary] (max) NULL , 
[VolledigeHandelsnaam] [varchar] (100) NULL 
) ON [PRIMARY] 

сохранить его

я создайте другой txt-файл с именем «Bedrijf.bat» и расширением bat. Это содержание:

OSQL.EXE -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseName 

сохранить его и из Проводника двойным щелчком выполнить

Результаты будут сохранены в текстовом файле на вашем диске С с именем «Bedrijf.out»

его показывает

1> 2> 3> START(A) create table 

, если все пойдет хорошо

Это я t

Смежные вопросы