查看并不总是显示所有列值

时间:2018-01-26 15:38:11

标签: sql-server tsql

我希望我在正确的位置张贴这个。

我们正在从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

2 个答案:

答案 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)