MSSQL 2005 服务器工作组。
我有一个数据库作为另一个较旧、较慢的 cobol 数据库/应用程序的“仓库”。
我最近将仓库从一个 SQL Server 实例移到了一个新实例,以使我正在做的仓库与其他生产数据库分开。
我遇到的问题让我感到困惑。出于这个问题的目的,我拥有的表作为旧数据库的副本具有 4 个字段:ID、LName、FName、MI、FullName - 全部不是 NULL。在报表服务器上,我有一个计算字段 FullName: LastName, FName MI:
FullName = LName + ', ' + FName + ' ' + MI;
发生的事情是名字并没有始终如一地加入,这让我完全感到困惑。
DECLARE @ID int;
SET @ID = 1;
SELECT ID, 'LName' FName, LName Field FROM TABLE WHERE ID IN (@ID) UNION
SELECT ID, 'FName' FName, FName Field FROM TABLE WHERE ID IN (@ID) UNION
SELECT ID, 'MI' FName, MI Field FROM TABLE WHERE ID IN (@ID) UNION
SELECT ID, 'LFM' FName, LName + ', ' + FName + ' ' + MI Field FROM TABLE WHERE ID IN (@ID)
这输出预期的:
1 FName Jack
1 MI T
1 LName Frost
1 LFM Frost, Jack T
但是如果我将它切换到不同的 ID,我会得到:
2 FName Joe
2 MI E
2 LName Schmoe
2 LFM Schmoe
这不是空值的问题(三个字段有数据)。修剪、合并、名称的不同组合(LFM、MFL、LF、MF 等)最终相同:要么这个人有全名……要么这个人列出了第一个。
据我所知,我在另一个实例中没有这个问题。新实例在同一台服务器上。
原始服务器实例:2005 9.0.3042 Serv\SQL2005 新服务器实例:2005 9.0.1399 Serv\DataWarehouse
注意:对“原始”数据库的查询按预期工作。查询基于此仓库构建的报告按预期工作。
所以原始数据库 > 数据仓库 > 报表。原创作品很好。报告工作正常。数据仓库没有。仓库和报表在同一个实例中,但是不同的数据库。
根据您的样本数据,您实际查询ID = 1396779 的数据是不同的
没有任何修剪、isnulls 等会
Schmoe
变成Frost
或Jack
变成Joe
.因此,数据不同。
否则,您会遇到一些数据库或服务器混乱。如果您对 DataWarehouse 的查询是错误的,那么基于 DataWarehouse 的报告将无法提供正确的数据。
请注意,跨数据库同义词或视图,或不同模式中的表(
dbo.PCDB_VISIT
例如,您的查询未使用)可能会误导您。或者您有一些客户端别名,这意味着您从 SSMS 指向了错误的服务器,但报告是正确的。试试这个以确保你在你认为的地方
在黑暗中刺伤:
这对你有什么好处?
如果我设置结果到文本,每列 50 个字符,并运行此查询,我会得到类似的行为: