참조를 검색하고자하는 스키마 bar
에 foo
이라는보기가 있습니다. 왜? 왜냐하면 스크립트의 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"];
}
}
}
정말요? 그것은 정확히 나를 위해 $ null [Object []]를 반환하는 것입니다. –
예, 방금 확인했습니다. $보기는 Object입니다. [ –
]하지만 SMO 뷰가 실제로 포함되어있는 반면 내 것은 $ null입니다. 나는 GetType()을 호출하면'[Microsoft.SqlServer.Management.Smo.View]' –