2010-10-04 54 views
1

我有一个奇怪的情况,当我通过SQL脚本查看数据时,我有一个值,但如果直接查看数据,我会得到另一个值。数据如何能够根据我查看它们的方式而变化

我的第一个想法是参数嗅探,但没有解决问题。除了通过存储过程获得数据之外,我没有在做任何有关价值的事情。

存储过程的示例。

CREATE PROCEDURE例如

@iRefProjectID INT

AS
- 防止参数嗅探
DECLARE @projectID诠释
SET @projectID = @iRefProjectID

SELECT iEntryType 
FROM table 
WHERE iEntryType IN (1,5,6) 
AND iProjectID = @projectID 
RETURN 

GO

现在其中一个如此提取的行包含'2',当我通过SP查看时,它是'1'。它根本不应该是2!= 1 || 5 || 6.突然2变成1,然后“1”== 1.

我应该在哪里杀死这个bug。

问题
SELECT * FROM table
3264427 2003-11-25 00:00:00.000 **2** Udligning til afregning F83907 100625.00

Exec SP
3264427 2003-11-25 00:00:00.000 -100625.00 Udligning til afregning F83907 **1**

稀释该行..发现了什么。这看起来像一个Join bug。

+0

尝试完全限定select中的表server.user.table。 – 2010-10-04 12:09:25

+0

我按照你的说法试过 - 没有改变。现在我有了dbname.dbo.table - 同样的结果,当然我在SP和我的手册上都选择了没有任何数据变化。我们正在谈论相同的标识行有两个不同的待处理值。 – DoStuffZ 2010-10-04 12:19:02

+0

所以你发布的代码与你运行的代码不一样?我也看到这个标志也不一样,但你只能在SP中选择1列。 – gbn 2010-10-04 12:58:18

回答

2

没有这样的错误。

您可能在不同模式下有两个同名的表。示例:dbo.table[DOMAIN\User].table

最佳做法是总是限定对象以避免不正确的模式解析。

还有其他选项,例如:

  • 不同的数据库
  • 不同的服务器
  • 表实际上是未刷新视图
  • 脏读(按伊夫·M.评论),因为你已经改变隔离级别
+1

Uncommited交易也可能是... – 2010-10-04 12:08:53

+0

我只有1个数据库与此数据,我只看我的发展机器和本地数据库。数据在今天上午刷新/恢复,并且不会在白天变化。数据每晚从客户端系统更新。 – DoStuffZ 2010-10-04 12:22:11

+1

仍然没有这样的错误。对象或安全性有问题,如果它是相同的分贝等。你不认为现在有人会注意到,如果它*是一个错误? – gbn 2010-10-04 12:28:26

相关问题