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.

Foi útil?

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

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

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top