Sql server SQL查询中的SQL Server参数表值

Sql 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]

我做了一个函数,它接受一个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] [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