속성 설정 - SMO

적용 대상: SQL Server(지원되는 모든 버전) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics

속성은 개체에 대한 설명 정보를 저장하는 값입니다. 예를 들어 Microsoft SQL Server 구성 옵션은 개체의 속성으로 Configuration 표시됩니다. 속성 컬렉션을 사용하여 직접 또는 간접적으로 속성에 액세스할 수 있습니다. 속성에 직접 액세스하는 경우 다음 구문을 사용합니다.

objInstance.PropertyName

속성에 읽기/쓰기 권한 또는 읽기 전용 권한이 있는지에 따라 속성 값을 수정하거나 검색할 수 있습니다. 또한 특정 속성을 설정해야 개체를 만들 수 있습니다. 자세한 내용은 특정 개체에 대한 SMO 참조를 참조하십시오.

참고

자식 개체의 컬렉션은 개체의 속성으로 나타납니다. 예를 들어 Tables 컬렉션은 Server 개체의 속성입니다. 자세한 내용은 Using Collections을 참조하세요.

개체의 속성은 속성 컬렉션의 멤버입니다. 속성 컬렉션을 사용하여 개체의 모든 속성을 반복할 수 있습니다.

다음과 같은 이유로 속성을 사용할 수 없는 경우도 있습니다.

  • 서버 버전은 이전 버전의 SQL Server 새 SQL Server 기능을 나타내는 속성에 액세스하려는 경우와 같이 속성을 지원하지 않습니다.

  • 서버는 설치되지 않은 SQL Server 구성 요소를 나타내는 속성에 액세스하려는 경우와 같이 속성에 대한 데이터를 제공하지 않습니다.

UnknownPropertyExceptionPropertyCannotBeRetrievedException SMO 실행을 catch하여 이러한 문제를 처리할 수 있습니다.

기본 초기화 필드 설정

SMO는 개체를 검색할 때 최적화를 수행합니다. 최적화는 다음과 같은 상태를 자동으로 조정하여 로드되는 속성 수를 최소화합니다.

  1. 부분적으로 로드됨. 개체를 처음 참조하는 경우 이름 및 스키마와 같은 최소한의 속성만 사용할 수 있습니다.

  2. 전체 로드됨. 아무 속성이나 참조하면 나머지 속성이 신속하게 로드되어 초기화되고 사용할 수 있게 됩니다.

  3. 많은 메모리를 사용하는 속성. 사용할 수 없는 나머지 속성은 많은 메모리를 사용하며 Expensive 속성 값이 true입니다(예: DataSpaceUsage). 이러한 속성은 구체적으로 참조될 때만 로드됩니다.

애플리케이션이 부분적으로 로드됨 상태에서 제공되는 속성 이외의 추가 속성을 인출하는 경우 쿼리를 제출하여 이러한 추가 속성을 검색하고 전체 로드됨 상태로 확장됩니다. 이로 인해 클라이언트와 서버 간에 불필요한 트래픽이 발생할 수 있습니다. SetDefaultInitFields 메서드를 호출하여 보다 최적화할 수 있습니다. SetDefaultInitFields 메서드를 사용하면 개체를 초기화할 때 로드되는 속성을 지정할 수 있습니다.

SetDefaultInitFields 메서드는 다시 설정될 때까지 또는 나머지 애플리케이션에 대해 속성 로드 동작을 설정합니다. GetDefaultInitFields 메서드를 사용하여 원래 동작을 저장하고 필요한 경우 복원할 수 있습니다.

예제

제공된 코드 예제를 사용하려면 애플리케이션을 만들 프로그래밍 환경, 프로그래밍 템플릿 및 프로그래밍 언어를 선택해야 합니다. 자세한 내용은 Visual Studio .NET에서 Visual C# SMO 프로젝트 만들기를 참조하세요.

Visual Basic에서 속성 가져오기 및 설정

이 코드 예제에서는 개체의 Information 속성을 가져오는 Edition 방법과 열거형 형식의 ExecuteSql 멤버로 속성의 SqlExecutionModesConnectionContext 속성을 설정하는 SqlExecutionModes 방법을 보여 줍니다.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Get a property.
Console.WriteLine(srv.Information.Version)
'Set a property.
srv.ConnectionContext.SqlExecutionModes = SqlExecutionModes.ExecuteSql

Visual C#에서 속성 가져오기 및 설정

이 코드 예제에서는 개체의 Information 속성을 가져오는 Edition 방법과 열거형 형식의 ExecuteSql 멤버로 속성의 SqlExecutionModesConnectionContext 속성을 설정하는 SqlExecutionModes 방법을 보여 줍니다.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Get a property.   
Console.WriteLine(srv.Information.Version);   
//Set a property.   
srv.ConnectionContext.SqlExecutionModes = SqlExecutionModes.ExecuteSql;   
}  

Visual Basic에서 개체를 만들기 전에 다양한 속성 설정

이 코드 예제에서는 AnsiNullsStatus 개체의 Table 속성을 직접 설정하는 방법과 Table 개체를 만들기 전에 열을 만들고 추가하는 방법을 보여 줍니다.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Create a new table in the AdventureWorks2012 database. 
Dim db As Database
db = srv.Databases("AdventureWorks2012")
Dim tb As Table
'Specify the parent database, table schema and the table name in the constructor.
tb = New Table(db, "Test_Table", "HumanResources")
'Add columns because the table requires columns before it can be created. 
Dim c1 As Column
'Specify the parent table, the column name and data type in the constructor.
c1 = New Column(tb, "ID", DataType.Int)
tb.Columns.Add(c1)
c1.Nullable = False
c1.Identity = True
c1.IdentityIncrement = 1
c1.IdentitySeed = 0
Dim c2 As Column
c2 = New Column(tb, "Name", DataType.NVarChar(100))
c2.Nullable = False
tb.Columns.Add(c2)
tb.AnsiNullsStatus = True
'Create the table on the instance of SQL Server.
tb.Create()

Visual C#에서 개체를 만들기 전에 다양한 속성 설정

이 코드 예제에서는 AnsiNullsStatus 개체의 Table 속성을 직접 설정하는 방법과 Table 개체를 만들기 전에 열을 만들고 추가하는 방법을 보여 줍니다.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Create a new table in the AdventureWorks2012 database.   
Database db;   
db = srv.Databases["AdventureWorks2012"];   
Table tb;   
//Specify the parent database, table schema, and the table name in the constructor.   
tb = new Table(db, "Test_Table", "HumanResources");   
//Add columns because the table requires columns before it can be created.   
Column c1;   
//Specify the parent table, the column name, and data type in the constructor.   
c1 = new Column(tb, "ID", DataType.Int);   
tb.Columns.Add(c1);   
c1.Nullable = false;   
c1.Identity = true;   
c1.IdentityIncrement = 1;   
c1.IdentitySeed = 0;   
Column c2;   
c2 = new Column(tb, "Name", DataType.NVarChar(100));   
c2.Nullable = false;   
tb.Columns.Add(c2);   
tb.AnsiNullsStatus = true;   
//Create the table on the instance of SQL Server.   
tb.Create();   
}  

Visual Basic에서 개체의 모든 속성 반복

이 코드 예제에서는 개체의 StoredProcedure속성 컬렉션을 반복하여 Visual Studio 출력 화면에 표시합니다.

이 예제 Property 에서 개체는 Visual Basic 키워드이기도 하므로 사각형 괄호 안에 배치되었습니다.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Set properties on the uspGetEmployeeManagers stored procedure on the AdventureWorks2012 database.
Dim db As Database
db = srv.Databases("AdventureWorks2012")
Dim sp As StoredProcedure
sp = db.StoredProcedures("uspGetEmployeeManagers")
sp.AnsiNullsStatus = False
sp.QuotedIdentifierStatus = False
'Iterate through the properties of the stored procedure and display.
'Note the Property object requires [] parentheses to distinguish it from the Visual Basic key word.
Dim p As [Property]
For Each p In sp.Properties
    Console.WriteLine(p.Name & p.Value)
Next

Visual C#에서 개체의 모든 속성 반복

이 코드 예제에서는 개체의 StoredProcedure속성 컬렉션을 반복하여 Visual Studio 출력 화면에 표시합니다.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Set properties on the uspGetEmployeedManagers stored procedure on the AdventureWorks2012 database.   
Database db;   
db = srv.Databases["AdventureWorks2012"];   
StoredProcedure sp;   
sp = db.StoredProcedures("uspGetEmployeeManagers");   
sp.AnsiNullsStatus = false;   
sp.QuotedIdentifierStatus = false;   
//Iterate through the properties of the stored procedure and display.   
  Property p;   
  foreach ( p in sp.Properties) {   
    Console.WriteLine(p.Name + p.Value);   
  }   
}  

Visual Basic에서 기본 초기화 필드 설정

이 코드 예제에서는 SMO 프로그램에서 초기화되는 개체 속성 수를 최소화하는 방법을 보여 줍니다. StringCollection 개체를 사용하려면 using System.Collections.Specialized 문을 포함해야 합니다.

SQL Server Profiler 사용하여 SQL Server 인스턴스로 전송된 숫자 문을 이 최적화와 비교할 수 있습니다.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks2012 database.
Dim db As Database
db = srv.Databases("AdventureWorks2012")
'Assign the Table object type to a System.Type object variable.
Dim tb As Table
Dim typ As Type
tb = New Table
typ = tb.GetType
'Assign the current default initialization fields for the Table object type to a 
'StringCollection object variable.
Dim sc As StringCollection
sc = srv.GetDefaultInitFields(typ)
'Set the default initialization fields for the Table object type to the CreateDate property.
srv.SetDefaultInitFields(typ, "CreateDate")
'Retrieve the Schema, Name, and CreateDate properties for every table in AdventureWorks2012.
'Note that the improvement in performance can be viewed in SQL Profiler.
For Each tb In db.Tables
    Console.WriteLine(tb.Schema + "." + tb.Name + " " + tb.CreateDate)
Next
'Set the default initialization fields for the Table object type back to the original settings.
srv.SetDefaultInitFields(typ, sc)

Visual C#에서 기본 초기화 필드 설정

이 코드 예제에서는 SMO 프로그램에서 초기화되는 개체 속성 수를 최소화하는 방법을 보여 줍니다. StringCollection 개체를 사용하려면 using System.Collections.Specialized 문을 포함해야 합니다.

SQL Server Profiler 사용하여 SQL Server 인스턴스로 전송된 숫자 문을 이 최적화와 비교할 수 있습니다.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Reference the AdventureWorks2012 database.   
Database db;   
db = srv.Databases["AdventureWorks2012"];   
//Assign the Table object type to a System.Type object variable.   
Table tb;   
Type typ;   
tb = new Table();   
typ = tb.GetType;   
//Assign the current default initialization fields for the Table object type to a   
//StringCollection object variable.   
StringCollection sc;   
sc = srv.GetDefaultInitFields(typ);   
//Set the default initialization fields for the Table object type to the CreateDate property.   
srv.SetDefaultInitFields(typ, "CreateDate");   
//Retrieve the Schema, Name, and CreateDate properties for every table in AdventureWorks2012.   
   //Note that the improvement in performance can be viewed in SQL Server Profiler.   
foreach ( tb in db.Tables) {   
   Console.WriteLine(tb.Schema + "." + tb.Name + " " + tb.CreateDate);   
}   
//Set the default initialization fields for the Table object type back to the original settings.   
srv.SetDefaultInitFields(typ, sc);   
}