如何编写一个“获取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
------解决方案--------------------给你抢先一步了
------解决方案--------------------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