Sql 丢失的记录
我将视图复制到新表中。但是,有些记录存在于视图中,但不存在于表中 此外,我不能找到所有丢失的记录时,我使用选择。。。不在:Sql 丢失的记录,sql,sql-server,Sql,Sql Server,我将视图复制到新表中。但是,有些记录存在于视图中,但不存在于表中 此外,我不能找到所有丢失的记录时,我使用选择。。。不在: DECLARE @email NVARCHAR(256)='xxx@xxx.com' SELECT Email FROM dbo.vw_DirectoryData WHERE Email=@email SELECT Email FROM dbo.tblDirectoryData WHERE Email=@email SELECT Email FROM dbo.vw_Dire
DECLARE @email NVARCHAR(256)='xxx@xxx.com'
SELECT Email FROM dbo.vw_DirectoryData WHERE Email=@email
SELECT Email FROM dbo.tblDirectoryData WHERE Email=@email
SELECT Email FROM dbo.vw_DirectoryData WHERE email NOT IN(SELECT email FROM dbo.tblDirectoryData)
Result:
Email
xxx@xxx.com
(1 row(s) affected)
Email
(0 row(s) affected)
email
(0 row(s) affected)
我尝试了另一种方法:
有没有克服此问题的建议?尝试使用“不存在”:
SELECT viw.Email
FROM dbo.vw_DirectoryData viw
WHERE NOT EXISTS(SELECT tbl.* FROM dbo.tblDirectoryData tbl WHERE tbl.Email = viw.Email)
你的
如果你去掉所有的空值就行了。因此,添加WHERE子句
NOT IN (SELECT email FROM dbo.tblDirectoryData WHERE email IS NOT NULL)
将NULL视为未知,因此,如果电子邮件未知,它不知道它是否等于某个值,可能是…我发现,问题在于数据类型。我从不同的表中读取数据来创建视图。该视图使用UNION ALL组合来自其他三个视图的数据
我通过创建SSIS包来解决这个问题,该包读取源数据,然后将其插入标准表中。然后读取数据,在相同的视图中应用我需要的所有格式和联接。如果使用子查询方法,则需要明确说明您拥有哪些表的电子邮件地址。但更好的方法可能是使用“除外”。1:是否有单独的字段名为Email和Email,分别使用小写和大写名称,或者您是否使用不区分大小写的排序规则,允许您独立于大小写引用列名?2:视图和表之间的行计数,即计数*是否匹配?电子邮件怎么样?不幸的是它不起作用。我做了以下操作:截断表,然后从视图插入到表,然后运行脚本,仍然没有显示记录。顺便说一下,表和视图中的记录数是相同的
NOT IN (SELECT email FROM dbo.tblDirectoryData)
NOT IN (SELECT email FROM dbo.tblDirectoryData WHERE email IS NOT NULL)