Sql server SQL查询中的SQL Server参数表值
我做了一个函数,它接受一个varchar IP地址并返回表值city、country、time\u zoneSql server SQL查询中的SQL Server参数表值,sql-server,sql-server-2008,table-valued-parameters,Sql Server,Sql Server 2008,Table Valued Parameters,我做了一个函数,它接受一个varchar IP地址并返回表值city、country、time\u zone ALTER function [dbo].[GQuery2](@ipAddress varchar(16)) returns @t table ( [country_name] [nvarchar](64) , [region_name] [nvarchar](128) , [city_name] [nvarchar](128), [latitude]
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
然后返回一个新表
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地址有一个值,其他列为NULL,我需要将IP地址从DimLocation传递到函数GQuery2ip以获取缺少的数据
问题是如何在select语句中使用表值函数?尝试以下查询:
Update DimLocation
Set City_Name = g.City_Name,
Country_Name = g.Country_Name,
....
From dbo.GQuery2(DimLocation.IP) g
您的函数还应包含IP字段,以便将函数与DimLocation表联接,否则查询将更新DimLocation表中的所有记录,或者您必须一次更新一条记录,即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表中的所有值。nothing update pcap.dbo.DimLocation Set city_name=g.city_name From dbo.GQuery2d.ip g:无法绑定多部分标识符d.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