2010-10-04 18 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

相關問題