Каков синтаксис T-SQL для подключения к другому SQL-серверу?

StackOverflow https://stackoverflow.com/questions/125457

Вопрос

Если мне нужно скопировать хранимую процедуру (SP) с одного SQL-сервера на другой, я щелкаю правой кнопкой мыши по SP в SSMS и выбираю Script Stored Procedure as > СОЗДАТЬ в > Новое окно редактора запросов.Затем я меняю подключение, щелкнув правой кнопкой мыши в этом окне и выбрав Подключение> Изменить подключение...а затем выберите новый сервер и клавишу F5, чтобы запустить команду создать на новом сервере.

Итак, мой вопрос таков: "Каков синтаксис T-SQL для подключения к другому SQL-серверу?" так что я могу просто вставить это в начало скрипта create и нажать F5, чтобы запустить его, и он переключится на новый сервер и запустит скрипт create.

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Если вы подключаетесь к нескольким серверам, обязательно вставьте GO между соединениями; в противном случае ваш T-SQL не будет выполняться на том сервере, на который вы рассчитываете.

Обновить:для подключения к другому sql-серверу и выполнения инструкций sql вы должны использовать Утилита sqlcmd.Обычно это делается в пакетном файле.Вы можете комбинировать это с xmp_cmdshell если вы хотите выполнить это в management studio.


одним из способов является настройка связанный сервер.затем вы можете добавить связанный сервер и имя базы данных к имени таблицы.(выберите * в linkedserver.database.dbo.имя_таблицы)

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

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

Связанный сервер и ОТКРЫТЫЙ ЗАПРОС могут предоставить доступ к DDL, но требуют некоторого переписывания вашего кода для инкапсуляции в виде строки, что затрудняет разработку / отладку.

В качестве альтернативы вы могли бы прибегнуть к внешней программе-драйверу для получения SQL-файлов для отправки на удаленный сервер с помощью ОТКРЫТОГО ЗАПРОСА.Однако в большинстве случаев вы могли бы с таким же успехом подключиться к серверу напрямую в первую очередь для оценки DDL.

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

Первый шаг:

-- 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

Если вы подключаетесь к нескольким серверам, вам следует добавить "GO" перед переключением серверов, иначе ваши инструкции sql будут выполняться не на том сервере.

например ,

: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

Попробуйте создать связанный сервер (что вы можете сделать с помощью sp_addlink - сервер) , а затем с помощью ОТКРЫТЫЙ ЗАПРОС

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

в этом случае текстовый файл называется "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]

сохрани это

затем я создаю другой текстовый файл с именем "Bedrijf.bat" и расширением bat.Это содержание:

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

сохраните его и в проводнике дважды щелкните, чтобы выполнить

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

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

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

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

Вот и все

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

Попробуйте ввести в PowerShell что-то вроде:

$cn = new-object system.data.SqlClient.SQLConnection("Data Source=server1;Initial Catalog=db1;User ID=user1;Password=password1");
$cmd = new-object system.data.sqlclient.sqlcommand("exec Proc1", $cn);
$cn.Open();
$cmd.CommandTimeout = 0
$cmd.ExecuteNonQuery()
$cn.Close();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top