SQL null图像到VARBINARY(MAX)结果为空

时间:2015-03-19 14:35:11

标签: sql sql-server sql-server-2005

以下是该方案。我们在一个包含压缩数据的表中有一个IMAGE类型的列。此列可以为null。在另一个版本中,我们将此数据移动到一个单独的表中,仍然是一个图像列。

我们有一个存储过程,用于检查原始表或新表中数据的位置。为此,它将值选择到VARBINARY(MAX)变量中,检查它是否为空,如果是,则从新表中获取它。

检查发生了一些奇怪的事情。对于数据库中的几行,该列显示为NULL,但是当转换为VARBINARY(MAX)时,它最终为空值0x。这仅适用于426中的4行,所有其他行评估为NULL罚款。如果在表本身中检查null,如WHERE <column> IS NULL,则评估为true,但如果执行WHERE CAST(<column> as VARBINARY(MAX)) IS NULL则评估为false。

我可以更改我的存储过程以便正确处理,但我对这里发生的事情感到有些困惑。有什么想法吗?

这是在SQL Server 2005上。

***edit to try and include a clearer example
e.g.
SELECT a
FROM Table
WHERE a IS NULL

SELECT a
FROM Table
WHERE CAST(a as VARBINARY(MAX)) IS NULL

the first query returns the result with NULL, the second query doesn't return anything.

Similarily, the stored procedure looks something like this:
DECLARE @CompressedData VARBINARY(MAX)

SELECT @CompressedData = imageColumn
FROM originalTable
WHERE ID = @ID

IF (@CompressedData IS NULL)
BEGIN
  SELECT @CompressedData = imageColumn
  FROM newTable
  WHERE ID = @ID
END

在这种情况下,@ CompressedData不会计算为NULL,因为它的值为0x

0 个答案:

没有答案