我們有1個用戶,當他們從VB應用程序運行存儲過程時,它運行SP的舊版本。對於舊版本,我的意思是由存儲過程更新覆蓋的版本。SQL Server運行舊版本的存儲過程
- 我們只有1種模式(DBO)
- 我在任何其他數據庫的服務器上(包括主站)檢查同一SP,而且只存在一次
- 我們使用NT驗證
- 我使用SQL Profiler來確保正確調用了正確的SP並且它是。
我連這個測試通過進行以下更改到第一行的SP BEGIN後:(「!這是更新的SP有一個錯誤」,16,1)
RAISERROR
回報
此用戶沒有收到此錯誤,他們反而得到原始錯誤。他們得到的錯誤並不重要,因爲它已被修復,但它就像這1個用戶正在調用不同的SP。
爲了讓事情更加令人困惑,幾個月前我們遇到了同樣的問題,使用不同的數據庫和vb應用程序以及2個不同的用戶。我們如何解決他們的問題是將他們從活動導演中刪除,然後添加他們不同的名字。
有沒有人有任何可能發生的事情的想法,我可以嘗試的其他事情,而不是重新創建用戶,或有任何其他人跑過這個?請告訴我,我不是瘋了。
編輯:我們在兩個VB應用程序和SQL Server和看SQL事件探查器改變了SP的名稱,但它運行更名爲SP,但它仍然運行舊的代碼,這是在SP。所有的代碼已被刪除,唯一存在的是Raiserror ...必須有我們缺少的東西。
EDIT2:會出現一個可選的BIT參數添加到SP與此有關。這裏是什麼SP看起來像幾個月一改之前前:
ALTER PROCEDURE [dbo].[BulkLoadSomeData]
@UserName varchar(50),
@FileName as varchar(max),
@OriginalFileName as varchar(max)
AS
BEGIN
SET NOCOUNT ON;
BULK INSERT ....
...Process the data...
END
與現在:
ALTER PROCEDURE [dbo].[BulkLoadSomeData]
@UserName varchar(50),
@FileName as varchar(max),
@OriginalFileName as varchar(max),
@HasElevatedSecurity bit = 0
AS
BEGIN
SET NOCOUNT ON;
IF @HasElevatedSecurity = 0 BEGIN
...Stick this into a process queue to run with higher priviledges...
...code ommited...
RETURN --Must return so we dont run the rest of the code
END
BULK INSERT ....
...Process the data...
END
所以我們增加了「RAISERROR(‘這是更新的SP有一個錯誤!’ 「SET NOCOUNT ON;」之後的行上)而且用戶仍然得到了無法訪問BULK INSERT的錯誤,但其他人都遇到了我們正在提出的錯誤。
然後我創建了一個表格,其中包含這四個參數,並用一些插入SQL替換了RAISERROR。一個用戶獲得BULK INSERT錯誤並且表中沒有記錄,其他人都插入記錄並運行該過程而沒有錯誤。在SQL事件探查器中,所有的exec語句都是相同的。
BTW,SQL事件探查表明這一點:
exec BulkLoadSomeData @UserName='User1', @FileName='UNC Path and file name with no special characters', @OriginalFileName='Line the other file name'
你有沒有嘗試過從同一個用戶在VB之外執行SP?如果是的話,他會得到哪個SP? –
@AdelSal,我沒有,因爲這是沒有安裝任何管理工具的最終用戶。我不得不稱呼它的唯一方法是通過VB。除非你知道另一種方式。 – Steve
運行此查詢..確保您沒有「倍數」。 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = N'PROCEDURE'order by SPECIFIC_NAME,SPECIFIC_SCHEMA – granadaCoder