我希望我在正确的位置张贴这个。
我们正在从DB2迁移到SQL Server 2016.在测试环境中,我们移动了所有数据,修改了大部分视图,功能,程序等。
我正在测试各种报告。必须进行必要的更改才能运行报告(即日期命令,连接等)。在测试对查询的更改时,第一次运行它时,没有返回任何结果,也没有出现错误。我再次运行查询,我收到了一个结果集。在我处理另一个查询之前,我没有想太多。我跑了一次,有些列没有任何数据。再次运行它,数据可能在那里,它可能没有。有时我可以连续运行5次,每次都缺少数据。其他时候我可以连续运行5次,数据就在那里。它始终是缺少数据的相同列(并且它是整个列)。
原始查询正在加入某些表的视图。所以,我把它简化为视图。我看到了同样的情况。有时数据存在,有时却没有。
为公用表表达式创建视图。基本上,大约有5个左右的CTE只从5个不同的表中提取当前行。然后,CTE随后被外部连接到主表(它也是内部连接到某些类型表)。主表和类型表中的数据始终存在。似乎缺少的是CTE。然而,其中一个CTE也总是在那里。
有没有人见过这种行为?我只是将视图缩小到只有一个CTE而只是主表。以下是视图和SQL语句。这种简化的视图确实提供了与更复杂的视图相同的结果。我总是得到一行填充前三列,然后有时其余列填充,有时它们为空。我还针对contact.contact_list表运行查询,查找相同的ID。我跑了很多次,它总是带回来。
CREATE VIEW CONTACT.ANTOXCUST2 (
clinicid,
clinicname,
address1,
address2,
city,
stateabrv,
countryid,
postalcode
)
AS
WITH
addr AS
(
SELECT
ADDRESS.ADDRESS_ID,
ADDRESS.CONTACT_ID,
ADDRESS.ADDRESS_1,
ADDRESS.ADDRESS_2,
ADDRESS.CITY,
ADDRESS.STATE_ABRV,
ADDRESS.COUNTRY_ID,
ADDRESS.POSTAL_CODE
FROM CONTACT.ADDRESS
WHERE ADDRESS.ADDRESS_TYPE_ID = 1 AND getdate() <= coalesce(ADDRESS.EXPIRATION_DATE, getdate())
)
SELECT
cl.CONTACT_ID,
coalesce(cl.CONTACT_NAME, ' '),
a.ADDRESS_1,
a.ADDRESS_2,
a.CITY,
a.STATE_ABRV,
a.COUNTRY_ID,
a.POSTAL_CODE
FROM
CONTACT.CONTACT_LIST AS cl
LEFT OUTER JOIN addr AS a
ON cl.CONTACT_ID = a.CONTACT_ID;
---------------------------------------------------
select *
from contact.antoxcust2 ac
where ac.clinicid = 4678
答案 0 :(得分:0)
查看代码,我首先尝试将GetDates转换为如下日期:
<div class="page">
</div>
<div class="frame">
<div class="page-copy">
</div>
</div>
<style>
.frame {
position: fixed;
bottom:20px;
right: 20px;
}
.page-copy {
position: absolute;
top: 0; // this positioning doesn't work because parent has position: fixed
right: 0;
bottom: 0;
left: 0;
}
</style>
这消除了GetDate()函数返回的值略有不同的可能性。
答案 1 :(得分:0)
WHERE ADDRESS.ADDRESS_TYPE_ID = 1
AND (ADDRESS.EXPIRATION_DATE is null OR getdate() <= ADDRESS.EXPIRATION_DATE)