2012-05-30 4 views
0

그래서 저는 우리 사용자가 자신의 데이터를 처리하는 데 사용하는 자신의 '작업 목록'을 만들 수있는 도구를 만드는 임무를 맡았습니다. 우리의 응용 프로그램에서 이러한 작업 목록은 SQL 뷰에 의해 구동되므로 이제는 사용자 프로그램을 기반으로 데이터베이스에 뷰를 동적으로 생성해야합니다. 나는 이것을 좋아하지 않지만, 지금 당장은 최선의 방법으로 브레인 스토밍을 해 나가야한다.코드에서 데이터베이스 뷰 만들기

기본적으로 내가 만든 모든보기에는 비슷한 뼈대가 있습니다. 항상 여러 개의 기둥이 있으며 여러 조인이 항상 발생합니다. 사용자 입력에 따라 추가 된 표시 열을 액세스하는 데 필요한 경우 추가 SELECT 열과 추가 조인을 추가 할 수 있습니다.

그래서 기본적으로 지금 내 코드는 정말 분명한 이유이 마음에 들지

string SQL = string.Format(@"CREATE VIEW {0} 
          AS 
          SELECT 
          Foo.A, 
          Bar.B, 
          {1} 
          FROM 
          Table 
          INNER JOIN Foo on Foo.ID = Table.FooID 
          INNER JOIN Bar on Bar.ID = Table.BarID 
          {2}", viewName, displayNames, extraJoins); 
Database.ExecuteNonQuery(SQL); 

... 다음과 같습니다. 그러나 ADO를 사용하여 뷰 생성을위한 매개 변수화 된 쿼리와 동일한 것을 찾을 수 없습니다. 나는 이것을하기 위해 스토어드 프로 시저를 만들 수도 있지만, 심지어 그렇게 엉성한 것으로 보인다. 이런 식으로 할 수있는 합리적인 방법이 있습니까? 또한 우리는 MS SQL을 사용하고 DML에 대조적으로까지 거슬러 2005

+1

왜 SQL 뷰 여야합니까? 각 사용자의 작업 목록이 동일한 테이블로 구성되어 있고 이러한 테이블간에 조인합니까? 순진한 관점에서 보면 사용자에 대한 식별자를 사용하는 저장 프로 시저 (또는 매개 변수가있는 쿼리)가 작동하는 것처럼 보일 수 있습니다. 아니면 더 복잡한가? 이 작업 목록에 대해 자세히 설명해 주시겠습니까? –

+0

@RussCam 이것은 매우 복잡한 문제를 다소 단순하게 보여줍니다. 이러한 작업 목록을 생성하는 코드는 이러한 관점에서 유도되는 큰 혼란입니다. 이 코드가 어떻게 동작 하는지를 변경하는 것은 현재 시점에서 불가능합니다 (나는 다음 릴리스를 위해 그것을 추진할 것이지만 지금은 막혀 있습니다). 필자의 예제에서 Foo와 Bar는 항상 동일한 테이블이지만, 사용자가 선택한 테이블은 여러 테이블에서 나올 수 있습니다. 이미 이러한 테이블을 활용하는 데 필요한 조인을 찾는 메커니즘이 있습니다. –

답변

1

으로 지원해야된다 (같은 SELECT/UPDATE/INSERT/DELETE) (너무 here 참조) no support for parameters in DDL있다. 그래서 기본적으로 동적 SQL을 사용하여 저장 프로 시저 내부에 숨기거나 설명하는 방식으로 수행합니다 ...

+0

어, 그건 불행한 일입니다. 나는 더 영리한 방법을 알아 낸 사람으로부터 우박이 나왔을 때 잠시 질문을 남겨 두겠다.하지만 그렇지 않다면 나는 수표를 줄 것이다. –