索引计算的持久VArBinary(Max)列并在Access 2003中使用ODBC

时间:2013-08-08 14:55:24

标签: sql sql-server ms-access indexing odbc

我正在尝试使用在SQL Server上使用持久性创建的哈希值来索引和引用两个表。我的计算是:

(hashbytes('sha1',((([AddressLine1]+[AddressLine2])+[City])+[State])+[Zip]))

列都是Varchar Type。

我在计算列上创建索引,然后尝试通过ODBC链接到SQLServer,但是我收到此错误:

Invalid field Definition 'FIELDNAME' in definition of index or relationship

这可能是什么原因以及如何解决?

修改

我不允许分享有关表定义的信息,但我唯一需要的密钥是主键,它是代理键。计算字段强制使用varbinary(max)类型并允许空值。

测试指数如下

USE [KMC_MailingData]
GO

SET ARITHABORT ON
GO

SET CONCAT_NULL_YIELDS_NULL ON
GO

set QUOTED_IDENTIFIER ON
GO

SET ANSI_NULLS ON
GO

SET ANSI_PADDING ON
GO

SET ANSI_WARNINGS ON
GO

SET NUMERIC_ROUNDABORT OFF
GO

/****** Object:  Index [test]    Script Date: 08/08/2013 11:09:48 ******/
CREATE NONCLUSTERED INDEX [test] ON [dbo].[AddressStaging] 
(
    [calculatedHash] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, 
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF,
ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

1 个答案:

答案 0 :(得分:0)

在Access中访问不幸translates VARBINARY(MAX) into an OLE Objectcannot be indexed。虽然这有点痛苦,但看起来你必须只使用没有在Access中定义的关系的表。 JetSQL和ODBC有一些限制,这似乎是其中之一。