对于具有地理数据类型的表,T-SQL CHECKSUM(*)函数失败

时间:2013-10-22 17:30:00

标签: sql-server tsql stored-procedures sql-server-2012

有人知道如何在SQL Server 2012存储过程中获取地理空间数据类型的校验和吗?我对其他类型使用校验和没有问题,但它在地理上引发了一个例外:

  

参数数据类型sys.geography对校验和函数的参数9无效。

我在SQL Server Management Studio中运行了调试器,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

根据您的评论,您的立场似乎如下。

CREATE TABLE T
(
I INT,
G geography
);

INSERT INTO T 
VALUES (1,geography::STGeomFromText('LINESTRING(-122.360 47.656, 
                                             -122.343 47.656 )', 4326));

然后您正在运行执行以下

的脚本
SELECT Avg(Cast(CHECKSUM(*) As Float))
FROM  T;

您需要对其进行更改,以便执行以下操作以避免此错误。

WITH CTE AS
(
SELECT I,
       CAST(G AS VARBINARY(MAX)) AS G
FROM T       
)
SELECT Avg(Cast(CHECKSUM(*) As Float))
FROM  CTE;

或者

SELECT Avg(Cast(CHECKSUM(I,CAST(G AS VARBINARY(MAX))) As Float))
FROM  T;

但是无论如何你都不能在这些表格中使用*