Sql server 使用STDistance的两个位置之间的距离

Sql server 使用STDistance的两个位置之间的距离,sql-server,Sql Server,我想为我的客户找到最近的员工 我有两张桌子 Customer_Master Customer_ID Customer_Name Cust_Location Cust100001 Subash 0xE6100000010C1B2E724F57172A408449F1F109685340 Cust100002 Naresh 0xE6100000010CBE30992A18152A4093AAED26F8675340 Employee_Master

我想为我的客户找到最近的员工

我有两张桌子

Customer_Master
Customer_ID  Customer_Name   Cust_Location
Cust100001   Subash          0xE6100000010C1B2E724F57172A408449F1F109685340
Cust100002   Naresh          0xE6100000010CBE30992A18152A4093AAED26F8675340

Employee_Master
Emp_ID      Emp_name  Emp_Location
Emp100001   Prakash   0xE6100000010C363B527DE7172A4069C36169E0675340
Emp100002   Suresh    0xE6100000010C98C3EE3B86172A4064E597C118685340
Emp100003   Vincent   0xE6100000010CE5B8533A58172A4090DD054A0A685340
Emp100004   Paul      0xE6100000010C2EE6E786A6142A40A0A696ADF5675340
我有客户和员工的位置。现在,我想选择离客户位置最近的员工

我尝试了下面显示错误的查询

Select Emp_ID 
from Emp_Master 
where Emp_ID.Emp_Location.STDistance
(
    Select Cust_Location 
    from Cust_Master 
    where Cust_ID='Cust100001'
)

我认为返回度量取决于地理数据类型的空间参考标识符(SRID)。默认值为4326,单位为米。数据库中有一个表格,您可以从sys.spatical\u reference\u systems中选择Select*

USE Test;
GO

CREATE TABLE Customers
(
    ID INT NOT NULL CONSTRAINT PK_Customers PRIMARY KEY CLUSTERED IDENTITY(1,1)
    , CustomerName NVARCHAR(255)
    , LOC GEOMETRY
);

CREATE TABLE Employees
(
    ID INT NOT NULL CONSTRAINT PK_Employees PRIMARY KEY CLUSTERED IDENTITY(1,1)
    , EmployeeName NVARCHAR(255)
    , LOC GEOMETRY
);

TRUNCATE TABLE Customers;
TRUNCATE TABLE Employees;

INSERT INTO Customers (CustomerName, LOC) VALUES ('Customer1',0xE6100000010C1B2E724F57172A408449F1F109685340);
INSERT INTO Customers (CustomerName, LOC) VALUES ('Customer2',0xE6100000010CBE30992A18152A4093AAED26F8675340);
INSERT INTO Customers (CustomerName, LOC) VALUES ('Customer3',0xE6100000010CBE30992A18152A4093AAED26F8675341);
INSERT INTO Customers (CustomerName, LOC) VALUES ('Customer4',0xE6100000010CBE30992A18152A4093AAED26F8675342);

INSERT INTO Employees (EmployeeName, LOC) VALUES ('Employee1',0xE6100000010C1B2E724F57172A408449F1F109685340);
INSERT INTO Employees (EmployeeName, LOC) VALUES ('Employee2',0xE6100000010CBE30992A18152A4093AAED26F8775340);
INSERT INTO Employees (EmployeeName, LOC) VALUES ('Employee3',0xE6100000010CBE30992A18152A4093AAED26F8885341);
INSERT INTO Employees (EmployeeName, LOC) VALUES ('Employee4',0xE6100000010CBE30992A18152A4093AAED26F8695342);

SELECT TOP(1) CustomerName, EmployeeName, Customers.LOC.STDistance(Employees.Loc) AS DistanceApart
FROM Customers, Employees
WHERE CustomerName = 'Customer2'
ORDER BY CustomerName, DistanceApart;

这将返回给定客户最接近的员工

尝试从Emp_Master、Cust_Master中选择Emp_ID,其中Emp_Master.Emp_Location==Cust_Matser.Cust_LocationHi..AM收到以下错误“数据类型的运算符无效。运算符等于,类型等于地理位置。”您的位置是不同类型的?错误表明您有一个
,其中
,没有标准。您好,Goyal..是4326以米为单位。但实际问题是查询本身返回语法错误..嗨Vernon,谢谢你的建议。查询正在进行中,只需稍作修改。实际上,您建议的查询是返回客户而不是员工。所以我修改了它,现在它工作正常了。。。