SQL地理空间链接服务器查询

时间:2018-07-13 15:05:03

标签: c# sql-server tsql arcgis linked-server

我对TSQL链接服务器查询有一个问题。链接服务器是GIS强制执行的,因此我们将坐标传递到该服务器,该服务器从链接服务器返回数据。请找到下面的查询。

DECLARE @input varchar(max), @sql varchar(max);

SET @input = N'((-119.470830216356 46.2642458295079,-119.470722927989 46.2642050348762,-119.470076515615 46.2647075484513,-119.470240130371 46.2647075484512,-119.470830216356 46.2642458295079))'
BEGIN
    SELECT @sql = 'select * from openquery([LinkedServerName],''DECLARE @b geometry;
                    SET @b = geometry::STGeomFromText(''''POLYGON '+ @input + ' '''', 4326);
                    SET @b = @b.MakeValid();  
                    SELECT * from [Database].[Table] AS b
                    where b.Shape.STIntersects(@b.STCentroid()) = 1'')'
END

EXEC(@sql)

但是问题是有时我们必须将超过8000个字符传递给输入参数@input,因为它是varchar(max)和EXEC命令都具有8000个字符限制。因此,我们试图摆脱动态SQL,以便我们可以使用2个输入变量传递输入(我们已在C#代码中实现了将输入分成8000个字符的子集,并将它们作为2个不同的输入发送给SQL查询) 。我们在实际服务器(链接服务器)中尝试了以下查询,该查询工作正常。

DECLARE @b geometry

SET @input = N'((-119.470830216356 46.2642458295079,-119.470722927989 46.2642050348762,'
SET @input2 = N'-119.470076515615 46.2647075484513,-119.470240130371 46.2647075484512,-119.470830216356 46.2642458295079))'

SELECT @b = geometry::STGeomFromText('POLYGON ' + @input + @input2 + '', 4326)
SELECT @b = @b.MakeValid()
SELECT * FROM [Database].[TableName] AS b
WHERE b.Shape.STIntersects(@b.STCentroid()) = 1

我们在本地服务器中尝试了以下SQL链接查询,但抛出的错误低于错误

enter image description here

DECLARE @input varchar(max), @input2 varchar(max);

SET @input = N'((-119.470830216356 46.2642458295079,-119.470722927989 46.2642050348762,'
SET @input2 = N'-119.470076515615 46.2647075484513,-119.470240130371 46.2647075484512,-119.470830216356 46.2642458295079))'

SELECT * FROM OPENQUERY([LinkedServerName],
'DECLARE @b geometry;
SELECT @b = geometry::STGeomFromText(''''POLYGON ' + @input + @input2 + '' ', 4326);
SELECT @b = @b.MakeValid(); 
SELECT * FROM [DatabaseName].[TableName] AS b 
where b.Shape.STIntersects(@b.STCentroid()) = 1') AS AD

在上面的查询中,附件中突出显示了一个问题。  enter image description here

我们非常感谢您的帮助。

0 个答案:

没有答案