我正在将使用Access数据库编写的经典asp编写的现有应用程序升级为SQL Server作为后端的后端。当用户离开空单元格时,代码输入空字符串('' - 两个刻度),当数据显示回来时,Access版本将此刻度视为Null,而SQl版本则不然。例如:有一个4列的输入表单,第一个是文本,然后是三个4位时间字段。这些时间字段的类型为Text in Access,因为它们是SQL Server中的varchar。显示数据时,Access仅显示第一个文本&忽略空字符串(带刻度的值),其中SQl服务器版本尝试使用空格显示时间值。当这些时间字段真正具有值而不是左边时,这是很好的。代码也有颜色代码 - 只有文本为蓝色,但有时间,它以红色显示。试图找到一个简单的解决方案,而无需更改代码。空字符串(带有两个连续的单引号)是SQL Server的值,其中为Null for Access。底线问题是:如何使SQL服务器也将空字符串解释为Null而不更改代码?..我测试ANSI NULL设置为开启或关闭 - 但没有帮助..任何数据库范围的设置?!谢谢你的帮助!
答案 0 :(得分:0)
一个非常短的函数,SQL将空字符串视为NULL NULLIF(myColumn, '')
。如果字符串为空,这将返回null。你如何实现这一点取决于你。当您说“不更改代码”时,可能会也可能不会。但是,例如,您可以使用计算列,这样您就不会更改asp代码,但它需要对数据库进行架构更改。或者您可以通过修改现有列的查询来使用该功能......这样的修改真的不可能满足您的要求吗?
答案 1 :(得分:0)
您可以实施' INSTEAD OF' SQL Server中的表上的触发器使用前面提到的NULLIF函数将所有空字符串转换为null。 如果您不熟悉此类触发器,可以使用链接http://technet.microsoft.com/en-us/library/ms175089(v=sql.105).aspx