日期:2014-05-17  浏览次数:20465 次

如何编写一个“获取SQL SERVER服务器IP”的函数
CREATE  FUNCTION [dbo].[Fun_GetServerIP]()  
RETURNS  INT
AS   
BEGIN 
DECLARE @IPValue VARCHAR(255)
    SET @IPValue=''
    
    --创建表变量获取服务器IP   
    DECLARE  @IPInfo TABLE(IPValue VARCHAR(255) NULL )
    INSERT INTO @IPInfo EXEC MASTER..xp_cmdshell 'ipconfig'
    
    SELECT @IPValue=@IPValue+substring(IPValue,charindex(': ',IPValue)+2,15)+' ' FROM @IPInfo where [IPValue] like '%IPv4 地址%'

SET @IPValue=rtrim(replace(@IPValue,char(13),''))

    RETURN @IPValue;
END

GO

这样写 报错了:
消息 443,级别 16,状态 14,过程 Fun_GetServerIP,第 16 行
在函数内的 'INSERT EXEC' 中对带副作用的或依赖于时间的运算符的使用无效。

------解决方案--------------------

-- 获取SQL Server服务器IP地址
select local_net_address
 from sys.dm_exec_connections 
 where session_id=@@spid

------解决方案--------------------
给你抢先一步了

引用:
SQL code
?



12345

-- 获取SQL Server服务器IP地址 select local_net_address  from sys.dm_exec_connections   where session_id=@@spid

------解决方案--------------------
Declare @ipLine varchar(200)
Declare @pos INT
DECLARE @ip VARCHAR(30)
set nocount on
          set @ip = NULL
          Create table #temp (ipLine varchar(200))
          
          Insert #temp exec master..xp_cmdshell 'ipconfig'
          
          select 
          @ipLine =
          ipLine
          from #temp
          where upper (ipLine) like '%IPv4 地址%'   
          --where upper (ipLine) like '%IP ADDRESS%'  --英文系统用
          
          if (isnull (@ipLine,'***') != '***')
          begin 
                set @pos = CharIndex (':',@ipLine,1);
                set @ip = rtrim(ltrim(substring (@ipLine , 
               @pos +&nbs