我们有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