设计 SQL Server 数据库时使用 uniqueidentifier 作为主键,Access 中的 GUID 类型与之对应,由于使用 ADO.NET 实现 CRUD 操作,基本上不必考虑类型转换的问题,即使是在 NHibernate 中,也是使用 IQuery,外加设置参数。
工具需要与服务器端同步数据,鉴于 Web Service 的速度问题,我们采用定时上传下载的方案,因此需要一个根据表结构生成 Update 和 Insert 语句的功能。从 Access 生成 SQL 语句时,遇到了 Guid 查询的问题,在 SQL Server 中使用的字符串形式,不能查询出任何数据。
SELECT * FROM tbl WHERE [GuidProject]='0021e54b-23b0-45a9-be10-7ac7afa49a77'
在 Access 帮助中找到了这样一段话:
如果条件字符串所引用的列为 GUID 类型,那么该条件表达式使用的语法稍微有所不同:
WHERE ReplicaID = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}
请确保包含如上所示的 嵌套大括号和 连字号。
需要注意的是,嵌入大括号的方法只用于 Where 语句,在 Insert 语句中还是要使用单引号,否则将产生 MALFORMED GUID in query 的错误。