SERVERPROPERTY('SERVERNAME')v / s'localhost'

时间:2013-07-10 08:22:51

标签: sql-server sql-server-2008 sql-server-2008-r2

我正在使用SQL Server 2008 R2。

我创建了一个SQL作业,它从数据库表中提取数据并将其写入输出文件,即特定位置的CSV。

为此,我使用bcpxp_cmdshell

bcp我需要传递服务器名称。到目前为止,我使用'localhost'作为服务器名称,但是通过在另一台PC上运行它我已经知道'localhost'登录没有正常工作,因此输出文件没有生成。

我搜索了它并获得了另一个命令,它返回服务器名称和服务器实例。即SERVERPROPERTY('ServerName')

现在我对使用它很困惑。我的本地PC和另一台PC运行正常,但我的问题是 - 如果我把它放在任何其他服务器或PC上,它是否总是安全运行而没有任何错误?哪一个是可取的?

1 个答案:

答案 0 :(得分:0)

我认为你对“LocalHost”一词感到困惑。这只是一个别名(也称为环回),它指向发起连接的机器。

例如,如果我的机器名为MYMACHINE并且我在其上运行默认实例,我可以通过指定LocalHost或MYMACHINE连接到数据库,我会连接。如果其他人试图从机器YOURMACHINE连接,他们只有在指定了MYMACHINE时才能连接到我的数据库。如果他们输入LOCALHOST,它将尝试连接到YOURMACHINE,因为这是连接发起的地方。

现在回到你的问题,是的,从SERVERPROPERTY('ServerName')获取servername值是安全的,因为它总是报告服务器的正确和当前网络名称。 @@ SERVERNAME不是这种情况,所以你应该回避这个目的。

LocalHost:https://en.wikipedia.org/wiki/Localhost

@@ ServiceName(备注部分的最后一段很重要):http://msdn.microsoft.com/en-us/library/ms187944.aspx

P.S。我为没有在问题中添加评论而道歉,但我目前的声誉还不够高。