如果我需要将存储过程(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来运行它,它将切换到新服务器并运行创建脚本。
在输入问题的同时,我意识到,如果我给你的背景是我正在尝试做的事情,那么你可能会想出一个更快更好的方法来实现这个目标。
此外,请确保在编写涉及链接服务器的查询时,包括如下括号:
SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table]
我发现至少在2000/2005,[]括号是必要的,至少在服务器名称周围。
尝试使用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();
在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.
更新:要连接到另一个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
如果我要解释这个问题 - 是否可以在DDL中选择服务器上下文来执行查询 - 答案是否定的。只能使用USE以编程方式选择数据库上下文。 (已经在外部预先选择了服务器上下文)
链接服务器和OPEN QUERY可以提供对DDL的访问,但需要对代码进行重写以封装为字符串 - 这使得开发/调试变得困难。
或者,您可以使用外部驱动程序来拾取SQL文件以通过OPEN QUERY发送到远程服务器。但是,在大多数情况下,您可能直接在第一个位置连接到服务器以评估DDL。
每当我们尝试从另一台服务器检索任何数据时,我们需要两个步骤。
第一步:
-- 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
如果要连接到多个服务器,则应在切换服务器之前添加“GO”,否则sql语句将针对错误的服务器运行。
EG
:CONNECT SERVER1
Select * from Table
GO
enter code here
:CONNECT SERVER1
Select * from Table
GO
尝试创建一个链接服务器(您可以使用sp_addlinkedserver),然后使用OPENQUERY
在我的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
如果一切顺利
而已
如果可能,请查看SSIS(SQL Server Integration Services)。我刚刚用这个工具包弄湿了,但已经在40多台服务器上循环并准备造成各种各样的破坏;)