PowerShell에서 SQL Server 식별자 사용
SQL Server Windows PowerShell 공급자를 데이터베이스 엔진과 함께 사용할 때는 컴퓨터 이름과 인스턴스 이름을 모두 지정해야 합니다. 기본 인스턴스의 경우에도 마찬가지입니다.
공급자는 Windows PowerShell 경로에서 SQL Server 식별자를 사용합니다. SQL Server 식별자는 Windows PowerShell이 경로에 지원하지 않는 문자를 포함할 수 있습니다. Windows PowerShell 경로에서 식별자를 사용할 때는 이러한 문자를 이스케이프 처리하거나 특수 인코딩을 사용해야 합니다.
컴퓨터 이름
SQLSERVER:\SQL 다음에 오는 첫 번째 노드는 데이터베이스 엔진 인스턴스를 실행하는 컴퓨터 이름(예: SQLSERVER:\SQL\MyComputer)입니다. 데이터베이스 엔진 인스턴스와 동일한 컴퓨터에 Windows PowerShell을 실행하는 경우 컴퓨터 이름 대신 localhost 또는 (로컬)을 사용할 수 있습니다. localhost 또는 (로컬)을 사용하는 스크립트는 다른 컴퓨터 이름을 반영하도록 변경하지 않고도 모든 컴퓨터에서 실행할 수 있습니다. 예를 들어 이 명령은 로컬 컴퓨터의 기본 인스턴스에 있는 AdventureWorks 예제 데이터베이스로 이동합니다.
Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks
(로컬)의 괄호 문자는 일반적으로 Windows PowerShell에서 명령으로 처리됩니다. 다음 중 하나를 수행해야 합니다.
경로 문자열을 따옴표로 묶습니다.
Set-Location "SQLSERVER:\SQL\(local)\DEFAULT\Databases\AdventureWorks"
역따옴표 문자(`)를 사용하여 괄호를 이스케이프 처리합니다.
Set-Location SQLSERVER:\SQL\`(local`)\DEFAULT\Databases\AdventureWorks
16진수 표현을 사용하여 괄호를 인코딩합니다.
Set-Location SQLSERVER:\SQL\%28local%29\DEFAULT\Databases\AdventureWorks
이스케이프 및 인코딩 문자는 이 항목의 뒷부분에서 보다 자세히 설명됩니다.
마침표(.)를 사용하여 Windows PowerShell 스크립트에서 로컬 컴퓨터를 지정할 수 없습니다. 마침표는 Windows PowerShell에서 명령으로 해석되기 때문에 지원되지 않습니다.
기본 인스턴스 이름
데이터베이스 엔진 실행 프로그램의 여러 인스턴스를 동일한 컴퓨터에서 실행할 수 있습니다. 데이터베이스 엔진 인스턴스는 컴퓨터 이름과 인스턴스 이름의 조합(예: MyComputer\MyInstance)으로 식별할 수 있습니다.
각 컴퓨터는 기본 데이터베이스 엔진 인스턴스를 한 개 가질 수 있습니다. 기본 인스턴스는 설치할 때 이름을 지정하지 마십시오. 연결 문자열에 컴퓨터 이름만 지정하면 해당 컴퓨터의 기본 인스턴스로 연결됩니다. 컴퓨터의 다른 모든 인스턴스는 명명된 인스턴스여야 합니다. 인스턴스 이름은 설치 시 지정하고, 연결 문자열은 컴퓨터 이름과 인스턴스 이름 모두를 지정해야 합니다.
SQL Server 공급자는 항상 인스턴스 이름을 지정하도록 요청합니다. 기본 인스턴스의 경우 인스턴스 이름을 DEFAULT로 지정해야 합니다.
Windows PowerShell 경로의 SQL Server 식별자
Windows PowerShell 공급자는 Windows 파일 시스템에 사용되는 것과 유사한 경로 구조를 사용하여 데이터 계층 구조를 표시합니다. SQL Server 공급자는 SQL Server 개체에 대한 경로를 구현합니다. 데이터베이스 엔진의 경우 드라이브는 SQLSERVER:로 설정되고 첫 번째 폴더는 \SQL로 설정되며 데이터베이스 개체는 컨테이너 및 항목으로 참조됩니다. 다음은 기본 데이터베이스 엔진 인스턴스에서 AdventureWorks 데이터베이스의 Purchasing 스키마에 있는 Vendor 테이블에 대한 경로입니다.
SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks\Tables\Purchasing.Vendor
SQL Server 식별자는 테이블 또는 열 이름과 같은 SQL Server 개체의 이름입니다. 다음과 같이 두 가지 SQL Server 식별자 유형이 있습니다.
일반 식별자는 Windows PowerShell 경로에서도 지원되는 문자 집합으로 제한됩니다. 이러한 이름은 변경하지 않고 Windows PowerShell 경로에 사용할 수 있습니다.
구분 식별자는 Windows PowerShell 경로 이름에 지원되지 않는 문자를 사용할 수 있습니다. 구분 식별자가 대괄호로 묶이면(예: [IdentifierName]) 대괄호로 묶은 식별자라고 하고 큰따옴표로 묶이면(예: "IdentifierName") 따옴표 붙은 식별자라고 합니다. 구분 식별자가 Windows PowerShell 경로에 지원되지 않는 문자를 사용하는 경우에는 해당 식별자를 컨테이너 또는 항목 이름으로 사용하기 전에 인코딩하거나 이스케이프 처리해야 합니다. 인코딩은 모든 문자에 대해 작동합니다. 콜론 문자(:)와 같은 일부 문자는 이스케이프 처리되지 않습니다.
인코딩 및 디코딩 식별자
Windows PowerShell 경로 이름에 지원되지 않는 문자는 "%" 문자 뒤에 해당 문자를 나타내는 비트 패턴의 16진수 값을 사용하여 표현하거나 인코딩할 수 있습니다(예: "**%**xx"). 인코딩은 Windows PowerShell 경로에 지원되지 않는 모든 문자를 처리하는 데 사용할 수 있습니다.
Encode-SqlName cmdlet은 SQL Server 식별자를 입력으로 사용하고 Windows PowerShell 언어에서 지원하지 않는 모든 문자를 "%xx"로 인코딩하여 문자열을 출력합니다. Decode-SqlName cmdlet은 인코딩된 SQL Server 식별자를 입력으로 사용하고 원래 식별자를 반환합니다. 예를 들면 다음과 같습니다.
다음 명령은 "Table%3ATest" 문자열을 반환합니다.
Encode-SqlName "Table:Test"
다음 명령은 "Table:Test"를 반환합니다.
Decode-SqlName "Table%3ATest"
Windows PowerShell cmdlet에 구분 식별자를 지정할 때는 인코딩된 문자 값을 직접 제공하거나 Encode-SqlName을 사용하여 인코딩된 문자를 제공할 수 있습니다. 예를 들어 [Table:Test] 테이블을 포함하는 스키마로 이미 이동한 경우 인코딩된 버전의 ":" 문자를 제공하여 테이블에 대해 cd를 수행할 수 있습니다.
Set-Location Table%3ATest
또는 Encode-SqlName을 사용하여 PowerShell에서 지원하는 이름을 작성할 수 있습니다.
Set-Location (Encode-SqlName "Table:Test")
다음은 Encode-SqlName으로 인코딩되는 문자와 Decode-SqlName으로 디코딩되는 문자입니다.
문자 |
\ |
/ |
: |
% |
< |
> |
* |
? |
[ |
] |
| |
16진수 인코딩 |
%5C |
%2F |
%3A |
%25 |
%3C |
%3E |
%2A |
%3F |
%5B |
%5D |
%7C |
문자 이스케이프
Windows PowerShell 역따옴표 이스케이프 문자(`)를 사용하여 SQL Server 구분 식별자에는 허용되고 Windows PowerShell 경로 이름에는 허용되지 않는 문자를 이스케이프 처리할 수도 있습니다. 하지만 이스케이프되지 않는 문자도 있습니다. 예를 들어 콜론 문자(:)는 Windows PowerShell에서 이스케이프 처리할 수 없습니다. 해당 문자가 포함된 식별자는 인코딩해야 합니다. 인코딩은 모든 문자에 대해 작동하므로 이스케이프 처리보다 안정적입니다.
다음은 # 문자를 이스케이프 처리하는 예입니다.
cd SQLSERVER:\SQL\MyComputer\MyInstance\MyDatabase\MySchema\`#MyTempTable
역따옴표 문자(`) 키는 일반적으로 키보드 왼쪽 위에서 ESC 키 아래에 있습니다.
cmdlet의 SQL Server 식별자
일부 SQL Server cmdlet에는 식별자를 입력으로 사용하는 매개 변수가 있습니다. 매개 변수 값은 일반적으로 따옴표가 붙은 문자열 상수나 문자열 변수로 제공됩니다. 식별자가 문자열 상수나 변수로 제공되면 Windows PowerShell에서 지원하는 문자 집합과 충돌하지 않습니다.