4

Visual Studio 2010 데이터베이스 프로젝트가 있고 기존 스키마를 가져 왔습니다. 이 데이터베이스에는 Integration Services 시스템 테이블 dbo.sysssislog를 참조하는 저장 프로 시저가 있으며 프로젝트에서 여러 가지 경고를 생성합니다."절차에 개체 dbo.sysssislog에 대한 확인되지 않은 참조가 있습니다."

master.dbschema 및 msdb.dbschema를 데이터베이스 참조로 추가하려고 시도했지만 masterdb 대신 masterdb라는 tempdb에 대한 참조 이름을 변경하려고 시도했지만 문제가 지속됩니다.

msdb.dbschema 파일을 열었고 파일에 sysssislog 테이블이 있는지 확인했습니다. 여기

는 경고입니다 :

SQL04151: Procedure: [dbo].[storedProcedureName] has an unresolved reference to object [dbo].[sysssislog]. 

답변

4

dbo.sysssislog는 (시스템 테이블로 표시) 사용자 테이블은 SQL Server 통합 서비스 (SSIS)에 의해 만들어진 자동으로, 당신은 이벤트와 패키지를 만들 때 SQL Server 유형의 로깅. 이 테이블 외에도 SSIS는 로깅 프로세스를 돕기 위해 일부 저장 프로 시저 (ALTER 일 수 있음)를 만듭니다.

그것은 당신이 언급 한 저장 프로 시저를 가져 오는 결과 데이터베이스 스키마를 수입하지만,이 시스템 테이블로 표시 이후 하지에서, dbo.sysssislog 테이블을 가져 아마 때문에, 프로젝트에서 해결되지 않은 참조입니다.

이제 가져온 테이블을 참조하는 저장 프로 시저가 많아 져서 경고 메시지가 나타납니다.

경고를 없애기 위해 수행 할 수있는 작업은 DROPCREATE (시스템 테이블 표시를 "제거"하는 유일한 방법) 테이블을 수동으로 다시 가져와 프로젝트로 가져 오는 것입니다.

는, 새로운 빈 SSDT 프로젝트를 만듭니다 "sysssislog"를 호출하고 여기에 sysssislog 테이블에 대한 스크립트를 추가 :

+0

사용자 테이블로 생성해도 다른 방식으로 동작하지는 않습니까? 솔루션이 앞으로 나아갈 것인지, 서버의 시스템 테이블이지만 소스 제어의 사용자 테이블로 유지할 필요가 없는지 확인하고 싶습니다. –

+0

아니요, 그렇지 않습니다. 보통 테이블을 변경하여 사용자 정의 로깅을위한 새로운 열을 추가하고 아무런 문제가 발생하지 않았습니다. – gonsalu

+0

좋았어, 고마워, 특히 드롭/재창조에 대한 힌트가 도움이되었다. – cdonner

1

여기에 대안과 청소기 방법입니다. 프로젝트를 빌드하여 dacpac 파일 "sysssislog.dacpac"을 생성하십시오.

SSDT 프로젝트에서 dacpac 파일에 databasereference를 추가하고 "데이터베이스 참조 추가"대화 상자에서 데이터베이스 위치에 대해 "동일한 데이터베이스"를 선택하십시오.

프로젝트가 소스 제어하에있는 경우 프로젝트에 dacpac을 추가 한 다음 참조를 추가하면 dacpac 파일도 소스 제어하에있게됩니다.

+0

이 작업을 수행 한 것처럼 보였지만 게시가 테이블을 만들려고 시도 했으므로 (따라서 스크립트가 실패했습니다). 이 기능 (동일한 데이터베이스 사용)을 사용하면 데이터베이스 섹션을 잠글 수 있고 데이터베이스 (감사 또는 로깅) 간의 공유 소스 코드 \ 테이블을 포함 할 수 있습니다. – Trubs