當前位置:首頁 » 編程語言 » sql處理ip
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql處理ip

發布時間: 2023-02-18 10:38:55

1. 如何用sql命令獲取ip地址

在一些需求中,可能我們需要知道連接到SqlServer的前端程序的一些系統信息,比如前端連接的計算機名稱,IP地址,什麼時候開始請求連接,什麼時候結束連接等信息。如果你對SqlServer的系統函數或視圖不太了解,這個功能看起來好像比較復雜,而實際上, SqlServer的動態管理視圖已經給我們提供了這些信息,下面我們來看兩個動態管理視圖。1、Sys.dm_exec_Sessions 這個視圖中提供了所有連接sqlserver的客戶端的一些信息,下面是Sys.dm_exec_Sessions返回的列:列名數據類型 說明Session_idsmallint標識與每個活動主連接關聯的會話。login_timedatetime建立會話的時間。host_namenvarchar(128)與會話關聯的主機。program_namenvarchar(128)與會話關聯的程序。host_process_idint與會話關聯的進程 ID。client_versionint客戶端連接到伺服器所用的介面版本。client_interface_namenvarchar(32)客戶端連接到伺服器所用的介面名稱。security_idvarbinary(85)與登錄名關聯的 Microsoft Windows 安全 ID。login_namenvarchar(128)與會話關聯的 SQL 登錄名。nt_domainnvarchar(128)從中建立會話連接的域。nt_user_namenvarchar(128)與會話關聯的用戶名。statusnvarchar(30)會話的狀態。可能的值: 1,運行 - 當前正在運行一個或多個請求
2,睡眠 - 當前沒有運行任何請求
3,休眠 - 會話處於登錄前狀態
context_infovarbinary(128)會話的 CONTEXT_INFO 值。cpu_timeint該會話所佔用的 CPU 時間(毫秒)。memory_usageint該會話所佔用的 8 KB 內存頁數。total_scheled_timeint計劃內含請求的會話的執行所耗用的總計時間(毫秒)。total_elapsed_timeint自會話建立以來已耗用的時間(毫秒)。endpoint_idint與會話關聯的端點的 ID。last_request_start_timedatetime最近一次會話請求的開始時間。這包括當前正在執行的請求。last_request_end_timedatetime最近一次會話請求的完成時間。readsbigint在該會話期間該會話中的請求所執行的讀取次數。Writesbigint在該會話期間該會話中的請求所執行的寫入次數。logical_readsbigint已對該會話執行的邏輯讀取數。is_user_processbit如果會話是系統會話,則為 0。否則,為 1。text_sizeint會話的 TEXTSIZE 設置。languagenvarchar(128)會話的 LANGUAGE 設置。date_formatnvarchar(3)會話的 DATEFORMAT 設置。date_firstsmallint會話的 DATEFIRST 設置。quoted_identifierbit會話的 QUOTED_IDENTIFIER 設置。arithabortbit會話的 ARITHABORT 設置。ansi_null_dflt_onbit會話的 ANSI_NULL_DFLT_ON 設置。ansi_defaultsbit會話的 ANSI_DEFAULTS 設置。ansi_warningsbit會話的 ANSI_WARNINGS 設置。ansi_paddingbit會話的 ANSI_PADDING 設置。ansi_nullsbit會話的 ANSI_NULLS 設置。concat_null_yields_nullbit會話的 CONCAT_NULL_YIELDS_NULL 設置。transaction_isolation_levelsmallint會話的事務隔離級別。 0 = 未指定 1 = 未提交讀取 2 = 已提交讀取 3 = 可重復 4 = 可序列化 5 = 快照lock_timeoutint會話的 LOCK_TIMEOUT 設置。該值以毫秒計。deadlock_priorityint會話的 DEADLOCK_PRIORITY 設置。row_countbigint到目前為止會話返回的行數。prev_errorint會話返回的最近一個錯誤的 ID。比如說,我們要看那些主機有連接到了sqlserver伺服器,可以使用下面的sql語句:
select distinct host_name from sys.dm_exec_Sessions要看那些用戶已連接到sqlserver伺服器:
select distinct login_name from sys.dm_exec_Sessions當然,利用上面的列,我們可以獲得更多想要的客戶端信息2、Sys.dm_exec_connections 這個視圖返回了連接sqlserver伺服器上面的每個連接的詳細信息,下面是Sys.dm_exec_connections返回的列:列名數據類型 說明Session_idint標識與此連接關聯的會話。most_recent_Session_idint顯示與此連接關聯的最近請求的會話 ID。connect_timedatetime連接建立時的時間戳。net_transportnvarchar(40)說明該連接使用的物理傳輸協議。protocol_typenvarchar(40)指定負載的協議類型。此參數當前可區分 TDS (TSQL) 和 SOAP。protocol_versionint與此連接關聯的數據訪問協議的版本。endpoint_idint與此連接關聯的端點的唯一標識符。此 endpoint_id 可用於查詢 sys.endpoints 視圖。encrypt_optionnvarchar(40)說明是否為此連接啟用了加密的布爾值。auth_schemenvarchar(40)指定與此連接一起使用的 SQL Server/NT 身份驗證。node_affinitysmallint顯示與此連接關聯的 SOS 節點。num_readsint此連接中已發生的讀包次數。num_writesint此連接中已發生的寫數據包次數。last_readdatetime此連接中上一次發生讀操作的時間戳。last_writedatetime此連接中上一次發生寫操作的時間戳。net_packet_sizeint用於信息和數據的網路包的大小。client_net_addressvarchar(40)與此伺服器連接的客戶端的主機地址。client_tcp_portint與該連接關聯的客戶機上的埠號。local_net_addressvarchar(40)顯示此連接的目標伺服器的 IP 地址。只對使用 TCP 傳輸提供程序的連接可用。local_tcp_portint如果此連接使用 TCP 傳輸,則顯示該連接的目標伺服器的 TCP 埠。connection_iniqueidentifier對每個連接進行唯一標識。parent_connection_iniqueidentifier標識MARS 會話正在使用的主要連接。most_recent_sql_handlevarbinary(64)此連接上執行的上一個請求的 SQL 句柄。most_recent_sql_handle 列始終與 most_recent_Session_id 列同步。比如,我要查看當前連接的客戶端IP與sqlserver所在伺服器的IP,可以用下面的sql查詢:
select client_net_address '客戶端IP',local_net_address '伺服器的IP' from sys.dm_exec_connections where Session_id=@@spid@@spid的作用是返回當前進程的會話ID。

2. 用SQL語句如何把IP最後一位換成星號

DECLARE@ipVARCHAR(15)='128.2.54.123'
SELECT@ip=REVERSE(@ip)
SELECT@ip=SUBSTRING(@ip,CHARINDEX('.',@ip),LEN(@ip))
SELECT@ip=REVERSE('*'+@IP)
SELECT@IP


DECLARE@opVARCHAR(15)='128.2.54.123'
SELECTREVERSE('*'+SUBSTRING(REVERSE(@op),CHARINDEX('.',REVERSE(@op)),LEN(@op)))

3. sql查詢問題關於IP段

IP地址被保存前應該轉換為數字,僅在顯示時轉換為字元,處理時應該統一用數字處理.
create
function
dbo.fn_IP(@ip
varchar(15))
returns
bigint
begin
return
parsename(@ip,4)*cast(16777216
as
bigint)+parsename(@ip,3)*65536+parsename(@ip,2)*256+parsename(@ip,1)
end
declare
@tb
table
(id
int,ip
varchar(15))
insert
@tb
select
1,'10.210.128.207'
UNION
ALL
select
2,'10.210.128.206'
UNION
ALL
select
3,'10.210.128.205'
UNION
ALL
select
4,'10.210.128.204'
UNION
ALL
select
5,'10.210.128.203'
UNION
ALL
select
6,'10.210.128.202'
UNION
ALL
select
7,'10.210.128.201'
------------------------------調用---------------------------------------------------
select
id,ip,dbo.fn_IP(ip)
from
@tb
where
dbo.fn_IP(ip)
between
dbo.fn_IP('10.210.128.203')
and
dbo.fn_IP('10.210.128.205')

4. SQL語句中如何提取ip地址的前兩段,如'192.168.0.1',提取'192.168'

可通過LEFT函數實現。如下實例:

如某資料庫中表Table1的IP列,儲存了IP地址的信息。因IP地址前兩段(共7位)固定不變,可直接用select left(ip,7) from table1 where 1 = 1 ...

筆者亦通過定義臨時變數取值的方法,演示如下圖:

5. SQL語句查詢IP段

--先構建一個轉換ip地址格式的函數 以『.』為間隔按4段拆分 每段前端補0 然後截取3位
--可將『1.1.166.0』轉換為『001001166000』
create function convertIP (@strIP varchar(20))
returns varchar(20)
as
begin
declare @str1 varchar(6),@str2 varchar(6),@str3 varchar(6),@str4 varchar(6),
@i int,@j int,@k int,@m int
set @i=1
set @j=1
set @k=1
set @m=1
while (@i<=len(@strIP))
begin
if (substring(@strIP,@i,1)='.')
begin
if @k=1 set @str1=substring(@strIP,@m,@j-1)
if @k=2 set @str2=substring(@strIP,@m,@j-1)
if @k=3 set @str3=substring(@strIP,@m,@j-1)
set @j=1
set @m=@i+1
set @k=@k+1
end
else
set @j=@j+1
set @i=@i+1
end
set @str4=substring(@strIP,@m,@j-1)
set @str1='000'+@str1
set @str1=substring(@str1,len(@str1)-2,3)
set @str2='000'+@str2
set @str2=substring(@str2,len(@str2)-2,3)
set @str3='000'+@str3
set @str3=substring(@str3,len(@str3)-2,3)
set @str4='000'+@str4
set @str4=substring(@str4,len(@str4)-2,3)
return @str1+@str2+@str3+@str4
end
--查詢ip地址為標准格式 例如'201.125.12.203'
select address from IP where dbo.convertIP(IPstart)<=dbo.convert('201.125.12.203') and dbo.convertIP(IPend)>=dbo.convertIP('201.125.12.203')

6. sql 2008資料庫不能用ip訪問怎麼解決

打開SQL server 配置管理器-->SQL server 網路配置-->實例名的協議(我的實例名為SQLEXPRESS)。

將SQLEXPRESS協議中的Named Pipes和 TCP/IP啟用。

點擊SQL Server服務,將SQL Server(SQLEXPRESS)重新啟動。

重新打開SQL Server Management Studio ,伺服器類型選擇資料庫引擎,伺服器名稱填(local)\實例名 或者 計算機名\實例名 (計算機名為你的計算機名稱,實例名一般為SQLEXPRESS或者安裝SQL時創建的實例名),身份驗證選擇windows身份驗證。

5
點擊連接,這時應該就會登陸進去。