O que é a sintaxe T-SQL para conectar para outro SQL Server?
-
02-07-2019 - |
Pergunta
Se eu preciso copiar um procedimento armazenado (SP) a partir de um SQL Server para outro clique direito sobre a SP no SSMS e selecione Script Stored Procedure como> CREATE para> Nova consulta Janela do Editor. Eu, então, alterar a conexão com o botão direito sobre essa janela e selecionando Conexão> Conexão Mudança ... e selecionando o novo servidor e F5 para executar a criar no novo servidor.
Então, minha pergunta é "Qual é a sintaxe T-SQL para conectar para outro SQL Server?" para que eu possa basta colar que no topo da criação de script e F5 para executá-lo e que iria mudar para o novo servidor e executar o script de criação.
Ao digitar a pergunta que eu percebi que se eu lhe dei a terra de volta para o que eu estou tentando fazer que você pode vir acima com uma maneira mais rápida e melhor de mim para fazer isso.
Solução
Além disso, certifique-se quando você escrever a consulta envolvendo o servidor vinculado, você incluir colchetes como este:
SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table]
Descobri que, pelo menos em 2000/2005 os [] colchetes são necessárias, pelo menos, ao redor do nome do servidor.
Outras dicas
No SQL Server Management Studio, ative o modo SQLCMD no menu Consulta. Em seguida, na parte superior do seu script, digite o comando a seguir
:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]
Se você está se conectando vários servidores, certifique-se de inserir GO
entre as conexões; caso contrário o seu T-SQL não será executado no servidor que você está pensando que vai.
Update: para conexão com outro servidor SQL e executar instruções SQL, você tem que usar sqlcmd Utilitário . Isso geralmente é feito em um arquivo em lotes. Você pode combinar isso com xmp_cmdshell se você quiser executá-lo dentro estúdio de gestão.
é uma maneira de configurar um servidor vinculado . então você pode anexar o servidor vinculado e o nome do banco de dados para o nome da tabela. (Select * from linkedserver.database.dbo.TableName)
USE master
GO
EXEC sp_addlinkedserver
'SEATTLESales',
N'SQL Server'
GO
Se eu fosse para parafrasear a pergunta - é possível escolher contexto do servidor para execução da consulta no DDL - a resposta é não. Apenas contexto de banco de dados pode ser programaticamente escolhido com o uso. (Tendo já pré-selecionado o contexto do servidor externamente)
Servidor vinculado e abra o Query pode dar acesso ao DDL, mas exigem um pouco uma reescrita do seu código para encapsular como uma string - o que torna difícil o desenvolvimento / debug.
Como alternativa, você pode recorrer a um programa do controlador externo para arquivos SQL de coleta para enviar para o servidor remoto via ABERTA CONSULTA. No entanto, na maioria dos casos, você poderia muito bem ter conectado ao servidor diretamente no 1º lugar para avaliar a DDL.
Sempre que estamos tentando recuperar os dados de outro servidor, precisamos de duas etapas.
Primeiro passo:
-- Server one scalar variable
DECLARE @SERVER VARCHAR(MAX)
--Oracle is the server to which we want to connect
EXEC SP_ADDLINKEDSERVER @SERVER='ORACLE'
Segundo passo:
--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
Se você está se conectando vários servidores você deve adicionar um 'GO' antes de servidores de comutação, ou suas instruções SQL será executado contra o servidor errado.
por exemplo.
:CONNECT SERVER1
Select * from Table
GO
enter code here
:CONNECT SERVER1
Select * from Table
GO
Tente criar um servidor vinculado (que você pode fazer com sp_addlinkedserver ) e, em seguida, usando OPENQUERY
no meu disco C I primeiro criar um arquivo txt para criar uma nova tabela. Você pode usar o que quiser neste arquivo de texto
Neste caso, o arquivo de texto é chamado de "Bedrijf.txt"
o conteúdo:
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]
save it
então eu criar um outro arquivo txt com o nome "Bedrijf.bat" eo morcego extensão. É de conteúdo:
OSQL.EXE -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseName
save-lo e do explorador duplo clique para executar
Os resultados serão salvos em um arquivo txt na unidade C com o nome "Bedrijf.out"
mostra
1> 2> 3> START(A) create table
Se tudo correr bem
É isso
Se possível, veja SSIS (SQL Server Integration Services). Eu estou apenas começando meus pés molhados com este conjunto de ferramentas, mas já estou looping mais de 40 + servidores e se preparando para causar todos os tipos de estragos;)
Tente PowerShell Tipo assim:
$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();