Каков синтаксис T-SQL для подключения к другому SQL-серверу?
Если мне нужно скопировать хранимую процедуру (SP) с одного SQL Server на другой, я щелкните правой кнопкой мыши на SP в SSMS и выберите Script Stored Procedure as > CREATE to > New Query Editor Window. Затем я изменяю соединение, щелкнув правой кнопкой мыши по этому окну и выбрав соединение > изменить соединение... а затем выберите новый сервер и F5 для запуска create на новом сервере.
Итак, мой вопрос: "каков синтаксис T-SQL для подключения к другому SQL-серверу?"так что я могу просто вставьте это в верхней части сценария create и F5, чтобы запустить его, и он переключится на новый сервер и запустит сценарий create.
при вводе вопроса я понял, что если я дам вам задний план к тому, что я пытаюсь сделать, что вы могли бы придумать более быстрый и лучший способ от меня, чтобы выполнить это.
9 ответов:
кроме того, убедитесь, что при написании запроса с участием связанного сервера вы включаете скобки следующим образом:
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 не будет выполняться на сервере, о котором вы думаете.
Update: для подключения к другому sql server и выполнения инструкций sql необходимо использовать программы sqlcmd. Обычно это делается в пакетном файле. Вы можете объединить это с xmp_cmdshell Если вы хотите выполнить его в среде management studio.
один из способов-настроить связанного сервера. затем можно добавить связанный сервер и имя базы данных к имени таблицы. (выбрать * из linkedserver.база данных.ДБО.TableName)
USE master GO EXEC sp_addlinkedserver 'SEATTLESales', N'SQL Server' GO
Если бы я перефразировал вопрос - Можно ли выбрать контекст сервера для выполнения запроса в DDL - ответ нет. Только контекст базы данных может быть программно выбран с использованием. (предварительно выбрав контекст сервера извне)
Linked server и OPEN QUERY могут предоставить доступ к DDL, но требуют некоторой перезаписи вашего кода для инкапсуляции в виде строки, что затрудняет разработку/отладку.
также вы можете прибегнуть к внешний драйвер программы для раскладки файлов SQL для отправки на удаленный сервер с помощью открытого запроса. Однако в большинстве случаев вы могли бы также подключиться к серверу непосредственно в 1-м месте, чтобы оценить 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
попробуйте создать связанный сервер (что вы можете сделать с процедуры sp_addlinkedserver), а затем с помощью OPENQUERY
на моем диске C я сначала создаю txt-файл для создания новой таблицы. Вы можете использовать все, что вы хотите в этом текстовом файле
в этом случае текстовый файл называется "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.летучая мышь " и расширение летучей мыши. Это содержание:
OSQL.EXE -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseNameсохраните его и из проводника дважды щелкните, чтобы выполнить
результаты будут сохранены в txt файл на вашем диске C с именем "Bedrijf.вон"
Это показывает
1> 2> 3> START(A) create tableесли все пойдет хорошо
вот это
Если возможно, проверьте службы SSIS (службы SQL Server Integration Services). Я просто получаю свои ноги мокрые с этим инструментарием, но уже зацикливаюсь на 40 + серверах и готовлюсь нанести всевозможный хаос;)
Comments