在我查看数据之前,数据如何变化

时间:2010-10-04 12:03:36

标签: sql-server stored-procedures

我有一个奇怪的情况,当我通过我的SQL脚本查看数据时,我有一个值,但如果我直接查看数据SELECT * FROM table,我会得到另一个值。

我的第一个想法是参数嗅探,但这并没有解决问题。除了使用存储过程获取它之外,我没有对手头的值做任何事情。

存储过程的示例。

  

CREATE PROCEDURE示例
  (
      @iRefProjectID int
  )
  AS
       - 防止参数嗅探
      DECLARE @projectID int
      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。

我应该在哪里杀死这个错误。

有问题的行
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**

啊,发现了什么。这看起来像是一个加入错误。

1 个答案:

答案 0 :(得分:2)

没有这样的错误。

您可能在不同的架构中有2个具有相同名称的表。示例:dbo.table[DOMAIN\User].table

最佳做法是始终限定对象以避免错误的架构解析。

还有其他选项,例如:

  • 不同的数据库
  • 不同的服务器
  • table实际上是一个未刷新的视图
  • 脏读(根据Yves M.评论),因为你已经改变了隔离级别