Pregunta

Si necesito copiar un procedimiento almacenado (SP) de un servidor SQL a otro, hago clic derecho en el SP en SSMS y selecciono Procedimiento almacenado de script como > CREAR en > Nueva ventana del editor de consultas.Luego cambio la conexión haciendo clic derecho en esa ventana y seleccionando Conexión > Cambiar conexión...y luego seleccionando el nuevo servidor y F5 para ejecutar la creación en el nuevo servidor.

Entonces, mi pregunta es "¿Cuál es la sintaxis T-SQL para conectarse a otro servidor SQL?" Para que pueda pegar eso en la parte superior del script Crear y F5 para ejecutarlo y cambiaría al nuevo servidor y ejecutaría el script Crear.

Mientras escribía la pregunta, me di cuenta de que si le explicaba los antecedentes de lo que estoy tratando de hacer, podría encontrar una manera mejor y más rápida de lograrlo.

¿Fue útil?

Solución

Además, asegúrese de que cuando escriba la consulta relacionada con el servidor vinculado, incluya corchetes como este:

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

Descubrí que al menos en 2000/2005 los corchetes [] son ​​necesarios, al menos alrededor del nombre del servidor.

Otros consejos

En SQL Server Management Studio, active el modo SQLCMD en el menú Consulta.Luego, en la parte superior de su secuencia de comandos, escriba el siguiente comando

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

Si se está conectando a varios servidores, asegúrese de insertar GO entre conexiones; de lo contrario, su T-SQL no se ejecutará en el servidor que cree.

Actualizar:para conectarse a otro servidor SQL y ejecutar declaraciones SQL, debe usar Utilidad sqlcmd.Normalmente, esto se hace en un archivo por lotes.Puedes combinar esto con xmp_cmdshell si desea ejecutarlo dentro de Management Studio.


una forma es configurar un servidor vinculado.luego puede agregar el servidor vinculado y el nombre de la base de datos al nombre de la tabla.(seleccione * de linkedserver.database.dbo.TableName)

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

Si tuviera que parafrasear la pregunta: ¿es posible elegir el contexto del servidor para la ejecución de consultas en el DDL? La respuesta es no.Sólo el contexto de la base de datos se puede elegir mediante programación con USE.(habiendo ya preseleccionado el contexto del servidor externamente)

El servidor vinculado y OPEN QUERY pueden dar acceso al DDL pero requieren una cierta reescritura de su código para encapsularlo como una cadena, lo que dificulta su desarrollo/depuración.

Alternativamente, puede recurrir a un programa controlador externo para recoger archivos SQL y enviarlos al servidor remoto mediante OPEN QUERY.Sin embargo, en la mayoría de los casos, es posible que también se haya conectado directamente al servidor en primer lugar para evaluar el DDL.

Siempre que intentamos recuperar datos de otro servidor, necesitamos dos pasos.

Primer paso:

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

Segundo paso:

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

Si se está conectando a varios servidores, debe agregar un 'GO' antes de cambiar de servidor, o sus declaraciones SQL se ejecutarán en el servidor incorrecto.

p.ej.

: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

Intente crear un servidor vinculado (lo cual puede hacer con sp_addlinkedserver) y luego usando CONSULTA ABIERTA

En mi unidad C, primero creo un archivo txt para crear una nueva tabla.Puedes usar lo que quieras en este archivo de texto.

en este caso el archivo de texto se llama "Bedrijf.txt"

el contenido:

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]

guárdalo

luego creo otro archivo txt con el nombre "Bedrijf.bat" y la extensión bat.Su contenido:

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

guárdalo y desde el explorador haz doble clic para ejecutar

Los resultados se guardarán en un archivo txt en su unidad C con el nombre "Bedrijf.out".

muestra

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

si todo va bien

Eso es todo

Si es posible, consulte SSIS (Servicios de integración de SQL Server).Recién me estoy poniendo manos a la obra con este conjunto de herramientas, pero ya estoy recorriendo más de 40 servidores y preparándome para causar todo tipo de estragos;)

Pruebe PowerShell Escriba como:

$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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top