2

참조를 검색하고자하는 스키마 barfoo이라는보기가 있습니다. 왜? 왜냐하면 스크립트의 TextBody 속성을 변경하려고하기 때문입니다.SQL SMO가 내보기를 반환하지 않는 이유는 무엇입니까?

SMO를 사용하여 뷰에 대한 참조를 검색하려고합니다. 지금까지 두 가지 방법을 시도했습니다. 한 가지 방법은보기에 null 값을 반환하고 다른 하나는 오류 메시지를 표시합니다. 개체에 대한

예 1

(보기를 인스턴스화) 모든 값은 그래서는 View 오브젝트는 새로운보기를 만드는 의미 인스턴스화 같아요, null입니다.

$ViewTest = New-Object -TypeName Microsoft.SqlServer.Management.Smo.View -ArgumentList $ServerSmo.Databases["dbname"], 'foo', 'bar'; 

예 2 (인덱서 표기)

해야 작업 (즉 $ServerSmo 유의 Smo.Server 객체이다). ViewCollection의 항목 인덱서를 기반으로 : MSDN Link

$ViewTest = $ServerSmo.Databases["dbname"].Views['foo', 'bar']; 

이 예는 나에게 몇 가지 이상한 오류 메시지를주고 하나입니다. To accomplish this action, set property AnsiNullsStatus. 메시지를 반환하는 경우 속성을 $true으로 설정하면 다음 메시지가 표시됩니다. To accomplish this action, set property BodyStartIndex.View에는 명명 된 속성조차 없습니다.

예 3 (항목() 인덱서 방법)

대신 인덱서 표기법을 사용하는 방법과 인덱서를 호출 잘 작동하는 것 같다 :

는 지금, 나는 두 개 더 작동 사례가있다.

$ViewTest = $ServerSmo.Databases["dbname"].Views.Item('foo', 'bar'); 

예 4 PowerShell을 파이프 라인에있는 모든 View 개체를 열거 한 다음 cmdlet를 잘 작동하는 것처럼 보이는 경우 객체를 사용하여 필터링 (어디-Object)를

하지만 비효율적이고 추한 .

$ViewTest = $ServerSmo.Databases["dbname"].Views | Where-Object -FilterScript { $_.Name -eq 'foo' and $_.Schema -eq 'bar' }; 

그래서이 모든를 작성 후, 나는 더 많은 이하로 내려 오는 내 질문을 추측 : 왜하지 않습니다 예 2에서와 같이 인덱서 표기법을 사용할 수 있습니까?

업데이트 :보기를 올바르게 검색하는 것으로 보이는 일부 C# 코드를 작성했습니다. 나를 위해

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.SqlServer.Management.Smo; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var server = new Server("."); 
      var db = server.Databases["dbname"]; 
      var view = db.Views["foo", "bar"]; 
     } 
    } 
} 

답변

2

예 2 작품 (v3의), 나는이 함께보기 TextBody을 변경할 수 있습니다 V2의 $의 ViewTest에서

$ViewTest = $ServerSmo.Databases['dbname'].Views['foo','bar'] 
$ViewTest.TextBody='foo' 
$ViewTest.Alter() 

시스템의 모음입니다.Object [] 그래서 인덱스를 설정하고 경고 메서드를 호출해야했습니다.

$ViewTest = $ServerSmo.Databases['dbname'].Views['foo','bar'] 
$ViewTest[0].TextBody='foo' 
$ViewTest[0].Alter() 
+0

정말요? 그것은 정확히 나를 위해 $ null [Object []]를 반환하는 것입니다. –

+0

예, 방금 확인했습니다. $보기는 Object입니다. [ –

+0

]하지만 SMO 뷰가 실제로 포함되어있는 반면 내 것은 $ null입니다. 나는 GetType()을 호출하면'[Microsoft.SqlServer.Management.Smo.View]' –

관련 문제