sql-server-2008 - SQL查詢中的SQL Server 參數表值

  显示原文与译文双语对照的内容
0 0

我做了一個函數,使用 varchar ( IP地址) 並返回表值( 城市,國家,time_zone ) 。"。"。

ALTER function [dbo].[GQuery2](@ipAddress varchar(16)) 
 returns @t table (
 [country_name] [nvarchar](64), 
 [region_name] [nvarchar](128), 
 [city_name] [nvarchar](128),
 [latitude] [float],
 [longitude] [float], 
 [zip_code] [nvarchar](30), 
 [time_zone] [nvarchar](8) 
 )
 as 
 begin 
 insert into @t ([country_name]
, [region_name]
, [city_name]
, [latitude]
, [longitude]
, [zip_code]
, [time_zone])
 select [country_name]
, [region_name]
, [city_name]
, [latitude]
, [longitude]
, [zip_code]
, [time_zone]
 from [pcap].[dbo].ip2loc 
 where ip_from = ( 
 select max(ip_from) 
 from [pcap].[dbo].ip2loc 
 where ip_from <= [dbo].IP2INT(@ipAddress) 
 ) 
 and ip_to = ( 
 select min(ip_to) 
 from [pcap].[dbo].ip2loc 
 where ip_to> = [dbo].IP2INT(@ipAddress) 
 ) 
 RETURN 
 end

問題是,我只能以這種格式調用函數:

 SELECT * FROM [dbo].GQuery2('89.98.0.0') 

並返回一個新表格

country_name region_name city_name latitude longitude zip_code time_zone
NETHERLANDS NOORD-HOLLAND AMSTERDAM 52.37403 4.88969 1089 +02:00

我想做一個這樣的查詢( 理論上)

UPDATE DimLocation d, [dbo].GQuery2(d.ip) g 
SET d.city_name = g.city_name, d.country_name = g.country_name.. ..

DimLocation 表具有架構:

IP, country_name, region_name, city_name, latitude, longitude, zip_code, time_zone

IP地址有一個值,其他列是空的,我需要將 DimLocation 地址從傳遞到函數 GQuery2(ip) 以獲取丟失的數據。

這個問題是如何在 select 語句中處理表值函數?

时间:原作者:2个回答

0 0

嘗試以下查詢:

Update DimLocation
Set City_Name = g.City_Name,
 Country_Name = g.Country_Name,
. . ..
From dbo.GQuery2(DimLocation.IP) g
原作者:
0 0

函數還應包含 IP 欄位,以便與 DimLocation 表聯接函數,否則查詢將更新 DimLocation 表中的所有記錄( IE ) 。 Where DimLocation.IP='192.168.0.1' ) 最好做的是,檢索記錄應該有一個可以以與你要更新的父表匹配的欄位。

如果在函數中添加了 IP 欄位,那麼查詢應該像這樣寫。

Update DimLocation Set DimLocation.City_Name = f.City_Name, DimLocation.Country_Name=f.Country_Name,.. 
From DimLocation Inner Join dbo.GQuery2(DimLocation.IP) f On DimLocation.IP=f.IP

因此,你可以在單個查詢中使用創建的函數更新 DimLocation 表中的所有值。

原作者:
...