在SQL脚本中指定服务器

17

我正在编写一个针对SQL Server 2008的SQL脚本,其中我在开头放置了一个USE语句来指定应该运行脚本的数据库:

use [my_database]

我有不同的环境,每个环境都有相同的数据库,例如开发(dev)、质量保证(qa)、生产(prod),是否有办法在脚本中指定脚本所属的环境,例如通过服务器名称或IP地址或其他机制。


你有没有找到这个问题的答案?@Filip De Vos的回答对你有用吗? - Ian R. O'Brien
3个回答

31
你可以将SQL Management Studio设置为SQLCMD模式,并使用:CONNECT myserver语句指定服务器。你可以通过点击以下图片中的选项来切换到命令模式。 enter image description here 然后你的脚本看起来应该像这样。
    :CONNECT devserver
    use [my_database]
    SELECT * FROM my_table

您甚至可以在执行期间使查询窗口切换服务器

    :CONNECT devserver
    use [my_database]
    SELECT * FROM my_table
    GO
    :CONNECT uatserver
    use [my_database]
    SELECT * FROM my_table

要连接特定的用户和密码,您可以按以下方式指定:

    :CONNECT devserver -U myUser -P myPassword
    use [my_database]
    SELECT * FROM my_table

实际上,您可以指定许多选项,这些选项在msdn文档中得到了很好的记录。


有没有办法做到这一点并指定用户名和密码?我得到了登录失败的错误。 - Ian R. O'Brien
1
你可以使用 :CONNECT devserver -U user -P password 命令。一旦我的更新停止出错,我将把它添加到答案中。 - Filip De Vos
谢谢。在嵌套/多个CTE中有没有一种方法可以做到这一点?(对我来说,这更好,因为我被锁定在链接服务器之外) - Tim
不,这是客户端黑客,你不能将其嵌入查询中。 - Filip De Vos

1

那是一个连接设置,而不是脚本内的参数。

如果需要,您可以通过批处理文件或PowerShell脚本在不同的环境下运行同一脚本,或者您可以设置链接服务器,但您不能仅仅说

USE SomeOtherServer

这也涉及到安全和网络问题。


0
假设您将在特定服务器上运行所有这些脚本 - 例如开发服务器 - 那么您只需要创建到其他每个服务器的链接服务器即可。
然后,例如,您可以在每个这些服务器上运行具有相同名称的存储过程,如下所示:
EXEC MyDatabase.dbo.mysp_DoSomething --Dev Server; no server prefix needed since that's where we are
EXEC QA.MyDatabase.dbo.mysp_DoSomething --QA Server
EXEC Prod.MyDatabase.dbo.mysp_DoSomething --Prod server

等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接