2008-09-24 21 views
50

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> 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.¿Qué es la sintaxis de T-SQL para conectarse a otro servidor SQL?

Así que mi pregunta es "¿Cuál es la sintaxis de T-SQL para conectarse a 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 le daba el telón de fondo a lo que estoy tratando de hacer, podría llegar a una forma más rápida y mejor para lograr esto.

Respuesta

47

También, asegúrese de que cuando se escribe la consulta que implique el servidor vinculado, se incluye entre paréntesis como éste:

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

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

2

intente crear un servidor vinculado (que se puede ver con sp_addlinkedserver) y luego usando OPENQUERY

+0

Wayne - si entiendo su sugerencia correctamente, entonces esto ejecuta un SP que reside en el servidor1 en el servidor2 ¿verdad? No crea el mismo SP en el servidor2, ¿verdad? – Guy

+0

Ejecuta un servidor sp1 que abre un enlace a servidor2. A continuación, puede pasar a través de una consulta o llamar a algo en server2. – Wayne

27

Actualización: para conectar a otro servidor SQL y ejecutar sentencias SQL, usted tiene que utilizar sqlcmd Utility. 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 linked server. luego puede agregar el servidor vinculado y el nombre de la base de datos al nombre de la tabla. (Seleccionar * de linkedserver.database.dbo.TableName)

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

Esta es en realidad la respuesta correcta a la pregunta específica. O más bien, primero se asegura de que el otro servidor esté vinculado y, por lo tanto, sea consultable, luego puede seleccionar otro servidor como lo explica Codewerks. – mahalie

5

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.

0

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

+1

Eso realmente no responde su pregunta. –

73

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

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

Si se conecta a varios servidores, asegúrese de insertar GO entre las conexiones; otherwise your T-SQL won't execute on the server you're thinking it will.

+3

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. http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx –

4

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

Si se conecta a varios servidores que habría que añadir un 'ir' antes de servidores de conmutación, o las sentencias SQL se ejecutará en contra de la servidor equivocado

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

+0

(1) modo SQLCMD, (2) ': CONNECT', (3)' USE', (4) 'SELECT'. –

1

en mi unidad C por primera vez crear un archivo txt para crear una nueva tabla. Se puede usar cualquier cosa que quiera 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

entonces crea otro archivo txt con el nombre "Bedrijf.bat" y la extensión bat. Es contenido:

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

guardarlo y haga doble clic desde el explorador para ejecutar

Los resultados se guardan en un archivo txt en la unidad C con el nombre "Bedrijf.out"

se muestra

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

si todo va bien

Eso es i t

Cuestiones relacionadas