VB 응용 프로그램에서 저장 프로 시저를 실행할 때 이전 버전의 SP가 실행되는 사용자가 1 명 있습니다. 이전 버전에서는 저장 프로 시저에 대한 업데이트로 덮어 쓰여진 버전을 의미합니다.저장 프로 시저의 이전 버전을 실행하는 SQL Server
- 우리는 1 스키마 (DBO)가 내가 서버에 (마스터 포함) 다른 데이터베이스에서 동일한 SP 검사
- 그리고 그것은 단지 우리는 사용합니까
- 일단 존재 NT 인증
- SQL 프로필러를 사용하여 올바른 SP가 호출되었는지 확인했습니다.
난 후에도 BEGIN 첫 번째 줄에있는 SP에 다음과 같이 변경하여이 테스트 : ('!이 오류와 함께 업데이트 된 SP이다', 16,1)
RAISERROR를
수익을
이 사용자는이 오류가 발생하지 않고 대신 원래 오류가 발생합니다. 고정되어 있기 때문에 오류는 중요하지 않지만이 1 명의 사용자가 다른 SP를 호출하는 것과 같습니다.
좀 더 혼란스럽게하기 위해 몇 달 전에 다른 데이터베이스와 VB 앱 및 2 명의 다른 사용자가 동일한 문제를 겪었습니다. 문제를 해결하기 위해 수행 한 작업은 실제 디렉터에서 제거한 다음 다른 이름으로 추가하는 것입니다.
아무도 무슨 일이 일어나고 있는지 알지 못하며, 사용자를 재현하는 대신 다른 사람이 시도해 볼 수있는 다른 사람이 있습니까? 내가 제 정신이 아니란 것을 말해주세요.
편집 : 우리는 모두 VB 응용 프로그램과 SQL 서버와 SQL 프로파일 러를보고 SP의 이름을 변경, 그것은 이름을 변경 한 SP를 실행 않지만 여전히 SP에 있던 예전의 코드를 실행합니다. 모든 코드가 삭제되었으며 존재하는 유일한 것은 Raiserror ... 우리가 누락 된 것이 있습니다.
EDIT2 : SP에 추가 된 선택적 BIT 매개 변수가이 작업과 관련이있는 것으로 보입니다. 다음은 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입니다!' 16,1) "다음 줄에"SET NOCOUNT ON; " 사용자가 BULK INSERT에 액세스 할 수 없다는 오류가 계속 발생했지만 다른 모든 사람들이 우리가 제기 한 오류가 발생했습니다.
그런 다음이 4 명의 매개 변수가있는 테이블을 만들고 RAISERROR를 일부 SQL로 바 꾸었습니다. 한 사용자가 BULK INSERT 오류를 가져오고 테이블에 레코드가 없으면 다른 모든 사람이 레코드를 삽입하고 오류없이 프로세스를 실행합니다. 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 * SPECIFIC_NAME, SPECIFIC_SCHEMA에 의해 ROUTINE_TYPE = N'PROCEDURE '인 경우 INFORMATION_SCHEMA.ROUTINES부터 – granadaCoder