【发布时间】:2018-04-11 07:41:21
【问题描述】:
我有 2 个相同的数据库。我有 1 个测试数据库,客户有 1 个生产数据库
我有一个看起来像这样的(简化的)查询
ALTER VIEW nulltest as
SELECT isnull(NextDate,getdate()) as TillDate FROM (
SELECT LEAD(FromDate) OVER (partition by personid ORDER BY fromdate) AS NextDate
FROM Taxes)t
实际上,TillDate 列永远不会为空,因为它有一个ISNULL 函数。但是当我检查查询的可空性时,我得到了 2 个不同的答案。我用这个查询检查
SELECT sys.columns.is_nullable FROM sys.columns INNER JOIN sys.objects ON sys.columns.object_id = sys.objects.object_id and sys.objects.name='nulltest'
在我的数据库上,我得到一个 1,而在产品服务器上,我得到一个 0。
什么给了?
更新
两个数据库中的FromDate都是datetime2, not null
@@Version
DB 1:Microsoft SQL Server 2016 (SP1-GDR) (KB4019089) - 13.0.4206.0 (X64) 2017 年 7 月 6 日 07:55:03 版权所有 (c) 微软公司 Windows Server 2012 R2 Essentials 6.3(内部版本 9600:)上的开发人员版(64 位)
DB 2:Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 2014 年 2 月 20 日 20:04:26 版权所有 (c) Windows NT 6.1 上的 Microsoft Corporation Express Edition(64 位)(Build 7601:Service Pack 1)
【问题讨论】:
-
Taxes.FromDate在两个数据库中的可空性是什么? -
另外,
SELECT @@VERSION在两个系统上都提供了什么,数据库兼容级别是多少?这可能是优化器的差异。
标签: sql-server sql-server-2014 sql-server-2016 nullable