0

我编写了一个存储过程来将数据从一个 SQL 服务器传输到另一个。是否可以在存储过程的开头有逻辑只在某个服务器上执行?

例如:

If IP!="100.xxx.xxx.xxx" then
   RaiseError 'You cannot run this procedure from this server
end if

我知道一种解决方案是不将 proc 部署到另一台服务器。只是好奇,谢谢。G-

4

1 回答 1

2
IF UPPER(@@SERVERNAME) = 'YOUR_SERVER'
BEGIN
    -- do stuff
END

注意@@SERVERNAME可能包括实例名称信息。所以你也可以说:

IF UPPER(@@SERVERNAME) = 'YOUR_SERVER\YOUR_INSTANCE'
BEGIN
    -- do stuff
END

如果您只关心服务器(以及该服务器上的任何实例),则可以使用不同的属性,尽管在集群实例的情况下这将返回节点名称而不是虚拟服务器名称:

IF UPPER(SERVERPROPERTY('ComputerNamePhysicalNetBIOS')) = 'YOUR_SERVER'
BEGIN
    -- do stuff
END

如果它是集群的,并且您希望相同的代码阻止执行,除非在该集群中的任何实例上,您可以说:

IF UPPER(@@SERVERNAME) = 'YOUR_SERVER'
  OR UPPER(@@SERVERNAME) LIKE 'YOUR_SERVER\%'
BEGIN
    -- do stuff
END
于 2012-07-03T20:56:24.997 回答