读书人

怎么编写一个“获取SQL SERVER服务器I

发布时间: 2013-04-21 21:18:07 作者: rapoo

如何编写一个“获取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 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 + 1 ,


len (@ipLine) - @pos)))
end


PRINT @ip


--DROP TABLE #temp


[解决办法]
怎么编写一个“获取SQL SERVER服务器IP”的函数
[解决办法]

create function dbo.Fun_GetServerIP()
returns varchar(20)
as
begin
declare @ip varchar(20)

select @ip=local_net_address
from sys.dm_exec_connections
where session_id=@@spid

return @ip
end


select dbo.Fun_GetServerIP() 'svrIp'

/*
svrIp
--------------------
10.7.1.35

(1 row(s) affected)
*/

[解决办法]
是的,这是语法规定.
参考 http://www.sql-server-helper.com/error-messages/msg-443-insert.aspx

读书人网 >SQL Server

热点推荐