连接到另一个SQL Server的T-SQL语法是什么?

问题描述 投票:57回答:10

如果我需要将存储过程(SP)从一个SQL Server复制到另一个SQL Server,我右键单击SSMS中的SP并选择Script Stored Procedure as> CREATE to> New Query Editor Window。然后我通过右键单击该窗口并选择Connection> Change Connection ...然后选择新服务器和F5以在新服务器上运行create来更改连接。

所以我的问题是“连接到另一个SQL Server的T-SQL语法是什么?”这样我就可以将它粘贴到创建脚本的顶部,然后运行F5来运行它,它将切换到新服务器并运行创建脚本。

在输入问题的同时,我意识到,如果我给你的背景是我正在尝试做的事情,那么你可能会想出一个更快更好的方法来实现这个目标。

sql-server tsql stored-procedures ssms
10个回答
49
投票

此外,请确保在编写涉及链接服务器的查询时,包括如下括号:

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

我发现至少在2000/2005,[]括号是必要的,至少在服务器名称周围。


0
投票

尝试使用PowerShell类型:

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

86
投票

在SQL Server Management Studio中,从“查询”菜单中启用SQLCMD模式。然后在脚本的顶部,输入以下命令

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

如果要连接到多个服务器,请确保在连接之间插入GO; otherwise your T-SQL won't execute on the server you're thinking it will.


28
投票

更新:要连接到另一个sql server并执行sql语句,你必须使用sqlcmd Utility。这通常在批处理文件中完成。如果要在管理工作室中执行,可以将此与xmp_cmdshell结合使用。


一种方法是配置linked server。然后,您可以将链接服务器和数据库名称附加到表名称。 (select * from linkedserver.database.dbo.TableName)

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

6
投票

如果我要解释这个问题 - 是否可以在DDL中选择服务器上下文来执行查询 - 答案是否定的。只能使用USE以编程方式选择数据库上下文。 (已经在外部预先选择了服务器上下文)

链接服务器和OPEN QUERY可以提供对DDL的访问,但需要对代码进行重写以封装为字符串 - 这使得开发/调试变得困难。

或者,您可以使用外部驱动程序来拾取SQL文件以通过OPEN QUERY发送​​到远程服务器。但是,在大多数情况下,您可能直接在第一个位置连接到服务器以评估DDL。


4
投票

每当我们尝试从另一台服务器检索任何数据时,我们需要两个步骤。

第一步:

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

第二步:

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

4
投票

如果要连接到多个服务器,则应在切换服务器之前添加“GO”,否则sql语句将针对错误的服务器运行。

EG

: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


2
投票

尝试创建一个链接服务器(您可以使用sp_addlinkedserver),然后使用OPENQUERY


2
投票

在我的C盘上,我首先创建一个txt文件来创建一个新表。您可以在此文本文件中使用您想要的内容

在这种情况下,文本文件称为“Bedrijf.txt”

内容:

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]

保存

然后我创建了一个名为“Bedrijf.bat”和扩展名bat的其他txt文件。它的内容是:

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

保存它并从资源管理器双击执行

结果将保存在C驱动器上的txt文件中,名称为“Bedrijf.out”

表明

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

如果一切顺利

而已


0
投票

如果可能,请查看SSIS(SQL Server Integration Services)。我刚刚用这个工具包弄湿了,但已经在40多台服务器上循环并准备造成各种各样的破坏;)

© www.soinside.com 2019 - 2024. All rights reserved.