sql server - usar - ¿Cuál es la sintaxis de T-SQL para conectarse a otro servidor SQL?
transact sql connect to another server (9)
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 a> Ventana del nuevo 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 de T-SQL para conectar con otro servidor SQL?" para poder pegarlo en la parte superior del script de creación y F5 para ejecutarlo y cambiar al nuevo servidor y ejecutar el script de creación.
Mientras escribía la pregunta, me di cuenta de que si les daba el telón de fondo de lo que estoy tratando de hacer, podrían hacer una mejor y más rápida manera de lograrlo.
Actualización: para conectarse a otro servidor sql y ejecutar sentencias sql, debe usar la utilidad sqlcmd . Esto generalmente se hace en un archivo por lotes. Puede combinar esto con xmp_cmdshell si desea ejecutarlo dentro del estudio de administración.
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
Además, asegúrese de que cuando escribe la consulta que involucra al 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.
Cada vez 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
En SQL Server Management Studio, active el modo SQLCMD desde el menú Consulta. Luego, en la parte superior de la secuencia de comandos, escriba el comando a continuación
: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 usted cree que lo hará.
Intenta crear un servidor vinculado (que puedes hacer con sp_addlinkedserver ) y luego usa OPENQUERY
Si es posible, consulte SSIS (SQL Server Integration Services). Me estoy mojando los pies con este kit de herramientas, pero ya estoy trabajando en más de 40 servidores y preparándome para causar todo tipo de estragos;)
Si se está conectando a varios servidores, debe agregar un ''IR'' antes de cambiar de servidor, o sus instrucciones sql se ejecutarán contra el servidor incorrecto.
p.ej
:CONNECT SERVER1
Select * from Table
GO
enter code here
:CONNECT SERVER1
Select * from Table
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. Solo el contexto de la base de datos se puede elegir mediante programación con USE. (habiendo preseleccionado el contexto del servidor externamente)
El servidor vinculado y OPEN QUERY pueden dar acceso al DDL pero requieren una reescritura de su código para encapsularlo como una cadena, lo que dificulta el desarrollo / depuración.
Alternativamente, podría recurrir a un programa de controlador externo para recoger los archivos SQL y enviarlos al servidor remoto a través de OPEN QUERY. Sin embargo, en la mayoría de los casos también podría haberse conectado al servidor directamente en el 1er lugar para evaluar el DDL.
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]
guardarlo
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árdelo y desde el explorador haga doble clic para ejecutar
Los resultados se guardarán en un archivo txt en su disco C con el nombre "Bedrijf.out"
muestra
1> 2> 3> START(A) create table
si todo va bien
Eso es