2010-05-05 4 views
0

VS2010 솔루션에 데이터베이스 프로젝트가 있습니다. 최근에 뷰를 변경하고 테이블에 직접 가지 않고이 뷰를 사용하도록 여러 함수를 변경했습니다. 하지만 배포 할 때 요청 된 열이보기에 아직 없으므로 대부분의 함수에서 오류가 발생합니다. 뷰의 업데이트가 UDF의 업데이트보다 늦게 발생합니다. 이 동작을 변경할 수있는 방법이 있습니까? 배포 스크립트가 테이블, 뷰, SP 및 UDF 순서로 업데이트되는 것이 최선의 방법이 아닐 수도 있습니다. 테이블이 먼저 업데이트 된 것처럼 보이지만 뷰는 배포 스크립트의 중간에 던져졌습니다.Visual Studio 2010에서 배포 프로세스가 너무 늦게 배포됩니다.

답변

2

UDF는 뷰에서 사용될 수 있고 뷰는 UDF에서 사용될 수 있으므로 모든 SQL을 구문 분석해야 일관된 전개 순서를 판별하기 위해 모든 뷰를 분석해야합니다. 그리고 다른 데이터베이스에 의존성이 있다면 어떻게해야 할지를 누가 알 수 있습니다.

편집

지금까지 내가 볼 수있는, 배포 순서를 강제로 문서화/지원 방법이 없습니다. 최소한의 테스트를 거치면 뷰보다 먼저 UDF (항상 테이블 값)가 배포됩니다.

심지어 낯선 편집, 그것은 종속성 분석을 수행 밝혀졌습니다. db 프로젝트에 대한 .dbschema 출력 파일을 보면, 함수에 대한 < Relationship Name = "BodyDependencies"> 요소가 생성되고, 뷰/열의 목록이 나열된 것을 볼 수 있습니다. 그러나 배치 SQL 스크립트는 나중에 뷰를 저장합니다. 이상한.

아마 최종 편집 편집 3. 일반적으로 문제는 해결할 수 없다고 생각합니다. (시피, 나는 스키마 바인딩을 지정했기 때문에 다음과 같은 오류 만 있음).

create table dbo.T1 (
    ID int not null, 
    C1 varchar(10) not null, 
    C2 varchar(10) not null, 
    C3 varchar(10) not null 
) 
go 
create view dbo.V1 
with schemabinding 
as 
    select ID,C1,C2 
    from dbo.T1 
go 
create function dbo.F1() 
returns table 
with schemabinding 
as 
    return select ID,C1,C2 from dbo.V1 where ID=1 
go 
alter view dbo.V1 
with schemabinding 
as 
    select ID,C1,C3 
    from dbo.T1 
go 
alter function dbo.F1() 
returns table 
with schemabinding 
as 
    return select ID,C1,C3 from dbo.V1 where ID=1 
go 

결과 :

Msg 3729, Level 16, State 3, Procedure V1, Line 4 
Cannot ALTER 'dbo.V1' because it is being referenced by object 'F1'. 
Msg 207, Level 16, State 1, Procedure F1, Line 5 
Invalid column name 'C3'. 
+0

기존의 함수 정의가 이전 뷰 정의에 의존하고, 새로운 기능의 정의는 새로운 뷰 정의에 의존하는 경우, 변경을 사용하여 데이터베이스를 변경할 수있는 권리 방법이 없습니다 UDF를 뷰에서 사용하는 것을 인식하지 못했지만 실제로는 뷰에 매개 변수가없는 스칼라 또는 UDF를 사용할 수 있습니다. 그러나 UDF 전에 내보기 업데이트를 실행하도록 배포 할 수 있습니까? 나는 그것이 muste가 업데이트된다는 것을 알고 있고 다른 어떤 의존성도 가지지 않는다. 하지만 모든 데이터베이스에서 그것을 수동으로 업데이트하고 싶지는 않습니다. – Markus

+0

그것은 해결책이 아니지만 지금 당장은 풀 수없는 대답입니다. 너무 나빴어. 도와 줘서 고마워. 대신 일부 사전 배포 확인을 수행하고 그런 식으로 해결할 것입니다. – Markus

관련 문제