我正在使用SQL Server 2008 R2。
我创建了一个SQL作业,它从数据库表中提取数据并将其写入输出文件,即特定位置的CSV。
为此,我使用bcp
和xp_cmdshell
。
在bcp
我需要传递服务器名称。到目前为止,我使用'localhost'
作为服务器名称,但是通过在另一台PC上运行它我已经知道'localhost'
登录没有正常工作,因此输出文件没有生成。
我搜索了它并获得了另一个命令,它返回服务器名称和服务器实例。即SERVERPROPERTY('ServerName')
现在我对使用它很困惑。我的本地PC和另一台PC运行正常,但我的问题是 - 如果我把它放在任何其他服务器或PC上,它是否总是安全运行而没有任何错误?哪一个是可取的?
答案 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。我为没有在问题中添加评论而道歉,但我目前的声誉还不够高。