Odbc.DataSource에 대한 매개 변수
Odbc.DataSource 함수는 드라이버에 대한 매개 변수와 options
다양한 드라이버 동작을 재정의할 수 있는 레코드라는 두 개의 매개 변수 connectionString
를 사용합니다. 옵션 레코드를 통해 드라이버에서 보고한 기능 및 기타 정보를 재정의하고, 탐색기 동작을 제어하고, M 엔진에서 생성된 SQL 쿼리에 영향을 줄 수 있습니다.
지원되는 옵션 레코드 필드는 공용이며 항상 사용할 수 있는 범주와 확장성 컨텍스트에서만 사용할 수 있는 두 가지 범주로 구분됩니다.
다음 표에서는 옵션 레코드의 공용 필드에 대해 설명합니다.
필드 | 설명 |
---|---|
CommandTimeout |
서버 쪽 쿼리가 취소되기 전에 실행할 수 있는 기간을 제어하는 기간 값입니다. 기본값: 10분 |
ConnectionTimeout |
서버에 대한 연결을 중단하기 전에 대기하는 시간을 제어하는 기간 값입니다. 기본값: 15초 |
CreateNavigationProperties |
반환된 테이블에서 탐색 속성을 생성할지 여부를 설정하는 논리 값입니다. 탐색 속성은 드라이버에서 보고한 외래 키 관계를 기반으로 합니다. 이러한 속성은 쿼리 편집기에서 확장할 수 있는 "가상" 열로 표시되어 적절한 조인을 만듭니다. 외래 키 종속성을 계산하는 것이 드라이버에 대한 비용이 많이 드는 작업인 경우 이 값을 false로 설정할 수 있습니다. 기본값: true |
HierarchicalNavigation |
스키마 이름으로 그룹화된 테이블을 볼지 여부를 설정하는 논리 값입니다. false로 설정하면 테이블이 각 데이터베이스 아래의 플랫 목록에 표시됩니다. 기본값: false |
SqlCompatibleWindowsAuth |
Windows 인증Trusted_Connection=Yes 을 사용할 때 SQL Server 호환 연결 문자열 생성할지 여부를 결정하는 논리 값입니다.드라이버가 Windows 인증을 지원하지만 연결 문자열 추가 또는 대체 설정이 필요한 경우 이 값을 false로 설정하고 다음 표에 설명된 옵션 레코드 필드를 사용해야 CredentialConnectionString 합니다.기본값: true |
다음 표에서는 확장성을 통해서만 사용할 수 있는 옵션 레코드 필드에 대해 설명합니다. 단순 리터럴 값이 아닌 필드는 이후 섹션에서 설명합니다.
필드 | 설명 |
---|---|
AstVisitor |
SQL 쿼리 생성을 제어하기 위해 하나 이상의 재정의가 포함된 레코드입니다. 이 필드의 가장 일반적인 사용법은 TOP을 지원하지 않는 드라이버에 대해 LIMIT/OFFSET 절을 생성하는 논리를 제공하는 것입니다. 필드 포함 Constant 및 .LimitClause 추가 정보: AstVisitor 재정의 |
CancelQueryExplicitly |
ODBC 서버에 대한 연결을 종료하기 전에 M 엔진이 ODBC 드라이버를 통해 실행 중인 호출을 명시적으로 취소하도록 지시하는 논리적 값입니다. 이 필드는 쿼리 실행이 서버에 대한 네트워크 연결과 독립적으로 관리되는 경우에 유용합니다(예: 일부 Spark 배포). 대부분의 경우 서버에 대한 네트워크 연결이 종료될 때 서버의 쿼리가 취소되므로 이 값을 설정할 필요가 없습니다. 기본값: false |
ClientConnectionPooling |
ODBC 드라이버에 대해 클라이언트 쪽 연결 풀링을 사용하도록 설정하는 논리적 값입니다. 대부분의 드라이버는 이 값을 true로 설정하려고 합니다. 기본값: false |
CredentialConnectionString |
자격 증명 관련 연결 문자열 속성을 지정하는 데 사용되는 텍스트 또는 레코드 값입니다. |
HideNativeQuery |
커넥터가 파워 쿼리 사용자 환경에서 생성된 SQL 문을 표시하는지 여부를 제어하는 논리 값입니다. 백 엔드 데이터 원본이 기본적으로 SQL-92를 지원하는 경우에만 true로 설정해야 합니다. 기본값: false |
ImplicitTypeConversions |
드라이버 또는 백 엔드 서버에서 지원하는 암시적 형식 변환을 포함하는 테이블 값입니다. 이 테이블의 값은 드라이버 자체에서 보고한 변환에 추가됩니다. 이 필드는 일반적으로 드라이버에서 SQLGetTypeInfo 보고한 데이터 형식 정보를 재정의할 때 필드와 함께 사용됩니다. |
OnError |
형식record 의 매개 변수를 errorRecord 수신하는 오류 처리 함수입니다.이 함수의 일반적인 용도로는 SSL 연결 오류 처리, 시스템에서 드라이버를 찾을 수 없는 경우 다운로드 링크 제공, 인증 오류 보고 등이 있습니다. |
SoftNumbers |
두 특정 숫자 형식 간의 변환이 SQL_CONVERT_* 기능에서 지원되는 것으로 선언되지 않은 경우 M 엔진에서 호환되는 데이터 형식을 선택할 수 있습니다. 기본값: false |
SqlCapabilities |
드라이버 기능의 다양한 재정의를 제공하는 레코드 및 ODBC 3.8을 통해 표현되지 않는 기능을 지정하는 방법입니다. 추가 정보: SqlCapabilities 재정의 |
SQLColumns |
함수에서 반환된 열 메타데이터를 수정할 수 있는 함수입니다 SQLColumns .추가 정보: SQLColumns 재정의 |
SQLGetFunctions |
호출에서 반환된 값을 재정의할 수 있는 레코드입니다 SQLGetFunctions .이 필드의 일반적인 용도는 매개 변수 바인딩 사용을 사용하지 않도록 설정하거나 생성된 쿼리가 CONVERT 대신 CAST를 사용해야 함을 지정하는 것입니다. 추가 정보: SQLGetFunctions 재정의 |
SQLGetInfo |
호출에서 반환된 값을 재정의할 수 있는 레코드입니다 SQLGetInfo .추가 정보: SQLGetInfo 재정의 |
SQLGetTypeInfo |
에서 반환 SQLGetTypeInfo 하는 형식 정보를 재정의하는 테이블을 반환하는 테이블 또는 함수입니다.값이 테이블로 설정되면 이 값은 드라이버에서 보고한 형식 정보를 완전히 바꿉니다. SQLGetTypeInfo 는 호출되지 않습니다.값이 함수로 설정되면 함수는 테이블을 수정할 SQLGetTypeInfo 수 있도록 원래 호출 결과를 받습니다.이 필드는 일반적으로 보고되는 데이터 형식과 SQLColumns 데이터 SQLGetTypeInfo 형식이 일치하지 않는 경우에 사용됩니다.추가 정보: SQLGetTypeInfo 재정의 |
SQLTables |
호출 SQLTables 에서 반환된 테이블 메타데이터를 수정할 수 있는 함수입니다. |
TolerateConcatOverflow |
결과가 사용 가능한 형식의 범위에 맞게 잘릴 수 있더라도 텍스트 값의 연결이 발생할 수 있습니다. 예를 들어 VARCHAR(4000) 필드를 VARCHAR(4000) 필드와 연결하여 VARCHAR 크기가 4000이고 CLOB 형식이 없는 시스템에서 연결하면 결과가 잘리더라도 연결이 접혀집니다. 기본값: false |
UseEmbeddedDriver |
(내부 사용): ODBC 드라이버를 로컬 디렉터리에서 로드해야 하는지 여부를 제어하는 논리 값입니다(ODBC 4.0 사양에 정의된 새 기능 사용). 이 값은 일반적으로 파워 쿼리와 함께 제공되는 Microsoft에서 만든 커넥터에 의해서만 설정됩니다. false로 설정하면 시스템 ODBC 드라이버 관리자가 드라이버를 찾아서 로드하는 데 사용됩니다. 대부분의 커넥터는 이 필드를 설정할 필요가 없습니다. 기본값: false |
AstVisitor
필드는 Odbc.DataSource 옵션 레코드를 통해 설정됩니다. 특정 쿼리 시나리오에 대해 생성된 SQL 문을 수정하는 데 사용됩니다.
참고
LIMIT 및 OFFSET 절(TOP이 아닌)을 지원하는 드라이버는 .에 대한 AstVisitor
재정의를 LimitClause
제공하려고 합니다.
이 값에 대한 재정의 제공은 더 이상 사용되지 않으며 이후 구현에서 제거될 수 있습니다.
이 필드는 두 개의 Int64.Type
인수(, take
)를 수신하고 두 개의 텍스트 필드(skip
Text
, Location
)가 있는 레코드를 반환하는 함수입니다.
LimitClause = (skip as nullable number, take as number) as record => ...
매개 변수는 skip
건너뛸 행 수(즉 OFFSET에 대한 인수)입니다. 오프셋을 지정하지 않으면 건너뛰기 값이 null이 됩니다. 드라이버가 LIMIT를 지원하지만 OFFSET LimitClause
을 지원하지 않는 경우 건너뛰기 값이 0보다 크면 함수가 중요하지 않은 오류(...)를 반환해야 합니다.
매개 변수는 take
취할 행 수(즉 LIMIT에 대한 인수)입니다.
결과 필드에는 Text
생성된 쿼리에 추가할 SQL 텍스트가 포함됩니다.
Location
필드는 절을 삽입할 위치를 지정합니다. 다음 표에서는 지원되는 값에 대해 설명합니다.
값 | 설명 | 예시 |
---|---|---|
AfterQuerySpecification |
LIMIT 절은 생성된 SQL의 끝에 배치됩니다. 가장 일반적으로 지원되는 LIMIT 구문입니다. |
SELECT a, b, c FROM 테이블 WHERE a > 10 제한 5 |
BeforeQuerySpecification |
LIMIT 절은 생성된 SQL 문 앞에 배치됩니다. | 5개 행 제한 SELECT a, b, c FROM 테이블 WHERE a > 10 |
AfterSelect |
LIMIT는 SELECT 문 뒤와 모든 한정자(예: DISTINCT) 뒤에 갑니다. | SELECT DISTINCT LIMIT 5 a, b, c FROM 테이블 WHERE a > 10 |
AfterSelectBeforeModifiers |
LIMIT는 SELECT 문 뒤에 있지만 모든 한정자(예: DISTINCT) 앞에 갑니다. | SELECT LIMIT 5 DISTINCT a, b, c FROM 테이블 WHERE a > 10 |
다음 코드 조각은 다음 형식의 선택적 OFFSET과 함께 LIMIT 절이 필요한 드라이버에 대한 LimitClause 구현을 제공합니다. [OFFSET <offset> ROWS] LIMIT <row_count>
LimitClause = (skip, take) =>
let
offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
in
[
Text = Text.Format("#{0} #{1}", {offset, limit}),
Location = "AfterQuerySpecification"
]
다음 코드 조각은 LIMIT를 지원하지만 OFFSET은 지원하지 않는 드라이버에 대한 구현을 제공합니다 LimitClause
. 형식: LIMIT <row_count>
.
LimitClause = (skip, take) =>
if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]
필드 | 세부 정보 |
---|---|
FractionalSecondsScale |
밀리초 값에 지원되는 소수 자릿수를 나타내는 1에서 7 사이의 숫자 값입니다. 이 값은 날짜/시간 값에 대해 쿼리 폴딩을 사용하도록 설정하려는 커넥터에 의해 설정되어야 합니다. 기본값: null |
PrepareStatements |
SQLPrepare을 사용하여 문을 준비해야 임을 나타내는 논리 값입니다. 기본값: false |
SupportsTop |
드라이버가 TOP 절을 지원하여 반환된 행 수를 제한하도록 나타내는 논리 값입니다. 기본값: false |
StringLiteralEscapeCharacters |
문자열 리터럴 및 LIKE 식을 이스케이프할 때 사용할 문자를 지정하는 텍스트 값 목록입니다. 예: {""} 기본값: null |
SupportsDerivedTable |
드라이버가 파생 테이블(하위 선택)을 지원한다는 것을 나타내는 논리 값입니다. 이 값은 규칙 수준을 SQL_SC_SQL92_FULL(드라이버에서 보고하거나 Sql92Conformance 설정으로 재정의된) 드라이버의 경우 true로 간주됩니다. 다른 모든 규칙 수준의 경우 이 값은 기본값이 false입니다. 드라이버가 SQL_SC_SQL92_FULL 준수 수준을 보고하지 않지만 지원 파생 테이블을 수행하는 경우 이 값을 true로 설정합니다. 여러 DirectQuery 시나리오에서는 파생 테이블을 지원해야 합니다. |
SupportsNumericLiterals |
생성된 SQL에 숫자 리터럴 값이 포함되어야 하는지 여부를 나타내는 논리 값입니다. false로 설정하면 항상 매개 변수 바인딩을 사용하여 숫자 값이 지정됩니다. 기본값: false |
SupportsStringLiterals |
생성된 SQL에 문자열 리터럴 값이 포함되어야 하는지 여부를 나타내는 논리 값입니다. false로 설정하면 항상 매개 변수 바인딩을 사용하여 문자열 값이 지정됩니다. 기본값: false |
SupportsOdbcDateLiterals |
생성된 SQL에 날짜 리터럴 값이 포함되어야 하는지 여부를 나타내는 논리 값입니다. false로 설정하면 날짜 값은 항상 매개 변수 바인딩을 사용하여 지정됩니다. 기본값: false |
SupportsOdbcTimeLiterals |
생성된 SQL에 시간 리터럴 값이 포함되어야 하는지 여부를 나타내는 논리 값입니다. false로 설정하면 시간 값은 항상 매개 변수 바인딩을 사용하여 지정됩니다. 기본값: false |
SupportsOdbcTimestampLiterals |
생성된 SQL에 타임스탬프 리터럴 값이 포함되어야 하는지 여부를 나타내는 논리 값입니다. false로 설정하면 타임스탬프 값은 항상 매개 변수 바인딩을 사용하여 지정됩니다. 기본값: false |
SQLColumns
는 SQLColumns에 대한 ODBC 호출의 결과를 수신하는 함수 처리기입니다. 원본 매개 변수에는 데이터 형식 정보가 포함된 테이블이 포함되어 있습니다. 이 재정의는 일반적으로 호출과 SQLColumns
호출 간의 데이터 형식 불일치를 SQLGetTypeInfo
해결하는 데 사용됩니다.
원본 테이블 매개 변수 형식에 대한 자세한 내용은 SQLColumns 함수를 참조하세요.
이 필드는 ODBC 드라이버에서 반환된 값을 재정 SQLFunctions
의하는 데 사용됩니다. 필드 이름이 ODBC SQLGetFunctions 함수에 대해 정의된 상수와 같은 FunctionId
레코드를 포함합니다. 이러한 각 필드에 대한 숫자 상수는 ODBC 사양에서 찾을 수 있습니다.
필드 | 세부 정보 |
---|---|
SQL_CONVERT_FUNCTIONS |
형식 변환을 수행할 때 지원되는 함수를 나타냅니다. 기본적으로 M 엔진은 CONVERT 함수를 사용하려고 시도합니다. CAST를 사용하는 것을 선호하는 드라이버는 이 값을 재정의하여 SQL_FN_CVT_CAST(0x2 숫자 값)만 지원된다는 것을 보고할 수 있습니다. |
SQL_API_SQLBINDCOL |
매시업 엔진이 데이터를 검색할 때 SQLBindCol API를 사용해야 하는지 여부를 나타내는 논리(true/false) 값입니다. false 로 설정하면 SQLGetData 가 대신 사용됩니다. 기본값: false |
다음 코드 조각은 M 엔진에 CONVERT 대신 CAST를 사용하도록 명시적으로 알리는 예제를 제공합니다.
SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]
이 필드는 ODBC 드라이버에서 반환된 값을 재정 SQLGetInfo
의하는 데 사용됩니다. ODBC SQLGetInfo 함수에 대해 정의된 상수와 이름이 같은 InfoType
필드의 레코드가 포함됩니다. 이러한 각 필드에 대한 숫자 상수는 ODBC 사양에서 찾을 수 있습니다. 검사 있는 전체 목록은 InfoTypes
매시업 엔진 추적 파일에서 찾을 수 있습니다.
다음 표에는 일반적으로 재정의된 SQLGetInfo
속성이 포함되어 있습니다.
필드 | 세부 정보 |
---|---|
SQL_SQL_CONFORMANCE |
드라이버에서 지원하는 SQL-92의 수준을 나타내는 정수 값입니다. (1) SQL_SC_SQL92_ENTRY: 항목 수준 SQL-92 규격입니다. (2) SQL_SC_FIPS127_2_TRANSITIONAL: FIPS 127-2 전환 수준 준수. (4) SQL_SC_ SQL92_INTERMEDIATE" 중간 수준 SQL-92 규격. (8) SQL_SC_SQL92_FULL: 전체 수준 SQL-92 규격. 파워 쿼리 시나리오에서 커넥터는 읽기 전용 모드에서 사용됩니다. 대부분의 드라이버는 SQL_SC_SQL92_FULL 준수 수준을 보고하고 해당 및 SQLGetFunctions 속성을 사용하여 특정 SQL 생성 동작을 재정의 SQLGetInfo 하려고 합니다. |
SQL_SQL92_PREDICATES |
SQL-92에 정의된 대로 SELECT 문에서 지원되는 조건자를 열거하는 비트 마스크입니다. ODBC 사양에서 SQL_SP_* 상수로 이동합니다. |
SQL_AGGREGATE_FUNCTIONS |
집계 함수에 대한 비트 마스크 열거형 지원입니다. SQL_AF_ALL SQL_AF_AVG SQL_AF_COUNT SQL_AF_DISTINCT SQL_AF_MAX SQL_AF_MIN SQL_AF_SUM ODBC 사양에서 SQL_AF_* 상수 로 이동합니다. |
SQL_GROUP_BY |
GROUP BY 절의 열과 선택 목록의 집계되지 않은 열 간의 관계를 지정하는 정수 값입니다. SQL_GB_COLLATE: 각 그룹화 열의 끝에 COLLATE 절을 지정할 수 있습니다. SQL_GB_NOT_SUPPORTED: GROUP BY 절은 지원되지 않습니다. SQL_GB_GROUP_BY_EQUALS_SELECT: GROUP BY 절은 선택 목록에 집계가 아닌 모든 열을 포함해야 합니다. 다른 열은 포함할 수 없습니다. 예를 들어 SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT. SQL_GB_GROUP_BY_CONTAINS_SELECT: GROUP BY 절은 선택 목록에 집계가 아닌 모든 열을 포함해야 합니다. 선택 목록에 없는 열을 포함할 수 있습니다. 예를 들어 SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT, AGE. SQL_GB_NO_RELATION: GROUP BY 절 및 선택 목록의 열은 관련이 없습니다. 선택 목록에서 그룹화되지 않은 집계되지 않은 열의 의미는 데이터 원본에 따라 다릅니다. 예를 들어 SELECT DEPT, SALARY FROM EMPLOYEE GROUP BY DEPT, AGE. ODBC 사양에서 SQL_GB_* 상수 로 이동합니다. |
다음 도우미 함수를 사용하여 정수 값 목록에서 비트 마스크 값을 만들 수 있습니다.
Flags = (flags as list) =>
let
Loop = List.Generate(
()=> [i = 0, Combined = 0],
each [i] < List.Count(flags),
each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
each [Combined]),
Result = List.Last(Loop, 0)
in
Result;
SQLGetTypeInfo
은 다음 두 가지 방법으로 지정할 수 있습니다.
- ODBC 호출과 동일한 형식 정보를 포함하는 고정
table
값입니다SQLGetTypeInfo
. - 테이블 인수를 수락하고 테이블을 반환하는 함수입니다. 인수에는 ODBC 호출의 원래 결과가 포함됩니다
SQLGetTypeInfo
. 함수 구현은 이 테이블을 수정하거나 추가할 수 있습니다.
첫 번째 방법은 ODBC 드라이버에서 반환된 값을 완전히 재정의하는 데 사용됩니다. 두 번째 방법은 이러한 값을 추가하거나 수정하려는 경우에 사용됩니다.
형식 테이블 매개 변수 및 예상 반환 값 형식에 대한 자세한 내용은 SQLGetTypeInfo 함수 참조로 이동하세요.
다음 코드 조각은 에 대한 SQLGetTypeInfo
정적 구현을 제공합니다.
SQLGetTypeInfo = #table(
{ "TYPE_NAME", "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS", "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX", "INTERNAL_PRECISION", "USER_DATA_TYPE" }, {
{ "char", 1, 65535, "'", "'", "max. length", 1, 1, 3, null, 0, null, "char", null, null, -8, null, null, 0, 0 },
{ "int8", -5, 19, "'", "'", null, 1, 0, 2, 0, 10, 0, "int8", 0, 0, -5, null, 2, 0, 0 },
{ "bit", -7, 1, "'", "'", null, 1, 1, 3, null, 0, null, "bit", null, null, -7, null, null, 0, 0 },
{ "bool", -7, 1, "'", "'", null, 1, 1, 3, null, 0, null, "bit", null, null, -7, null, null, 0, 0 },
{ "date", 9, 10, "'", "'", null, 1, 0, 2, null, 0, null, "date", null, null, 9, 1, null, 0, 0 },
{ "numeric", 3, 28, null, null, null, 1, 0, 2, 0, 0, 0, "numeric", 0, 0, 2, null, 10, 0, 0 },
{ "float8", 8, 15, null, null, null, 1, 0, 2, 0, 0, 0, "float8", null, null, 6, null, 2, 0, 0 },
{ "float8", 6, 17, null, null, null, 1, 0, 2, 0, 0, 0, "float8", null, null, 6, null, 2, 0, 0 },
{ "uuid", -11, 37, null, null, null, 1, 0, 2, null, 0, null, "uuid", null, null, -11, null, null, 0, 0 },
{ "int4", 4, 10, null, null, null, 1, 0, 2, 0, 0, 0, "int4", 0, 0, 4, null, 2, 0, 0 },
{ "text", -1, 65535, "'", "'", null, 1, 1, 3, null, 0, null, "text", null, null, -10, null, null, 0, 0 },
{ "lo", -4, 255, "'", "'", null, 1, 0, 2, null, 0, null, "lo", null, null, -4, null, null, 0, 0 },
{ "numeric", 2, 28, null, null, "precision, scale", 1, 0, 2, 0, 10, 0, "numeric", 0, 6, 2, null, 10, 0, 0 },
{ "float4", 7, 9, null, null, null, 1, 0, 2, 0, 10, 0, "float4", null, null, 7, null, 2, 0, 0 },
{ "int2", 5, 19, null, null, null, 1, 0, 2, 0, 10, 0, "int2", 0, 0, 5, null, 2, 0, 0 },
{ "int2", -6, 5, null, null, null, 1, 0, 2, 0, 10, 0, "int2", 0, 0, 5, null, 2, 0, 0 },
{ "timestamp", 11, 26, "'", "'", null, 1, 0, 2, null, 0, null, "timestamp", 0, 38, 9, 3, null, 0, 0 },
{ "date", 91, 10, "'", "'", null, 1, 0, 2, null, 0, null, "date", null, null, 9, 1, null, 0, 0 },
{ "timestamp", 93, 26, "'", "'", null, 1, 0, 2, null, 0, null, "timestamp", 0, 38, 9, 3, null, 0, 0 },
{ "bytea", -3, 255, "'", "'", null, 1, 0, 2, null, 0, null, "bytea", null, null, -3, null, null, 0, 0 },
{ "varchar", 12, 65535, "'", "'", "max. length", 1, 0, 2, null, 0, null, "varchar", null, null, -9, null, null, 0, 0 },
{ "char", -8, 65535, "'", "'", "max. length", 1, 1, 3, null, 0, null, "char", null, null, -8, null, null, 0, 0 },
{ "text", -10, 65535, "'", "'", "max. length", 1, 1, 3, null, 0, null, "text", null, null, -10, null, null, 0, 0 },
{ "varchar", -9, 65535, "'", "'", "max. length", 1, 1, 3, null, 0, null, "varchar", null, null, -9, null, null, 0, 0 },
{ "bpchar", -8, 65535, "'", "'", "max. length", 1, 1, 3, null, 0, null, "bpchar", null, null, -9, null, null, 0, 0 } }
);
다음 코드 조각은 드라이버에서 bpchar
반환하는 기존 형식에 형식을 추가합니다.
SQLGetTypeInfo = (types as table) as table =>
let
newTypes = #table(
{
"TYPE_NAME",
"DATA_TYPE",
"COLUMN_SIZE",
"LITERAL_PREF",
"LITERAL_SUFFIX",
"CREATE_PARAS",
"NULLABLE",
"CASE_SENSITIVE",
"SEARCHABLE",
"UNSIGNED_ATTRIBUTE",
"FIXED_PREC_SCALE",
"AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME",
"MINIMUM_SCALE",
"MAXIMUM_SCALE",
"SQL_DATA_TYPE",
"SQL_DATETIME_SUB",
"NUM_PREC_RADIX",
"INTERNAL_PRECISION",
"USER_DATA_TYPE"
},
// we add a new entry for each type we want to add
{
{
"bpchar",
-8,
65535,
"'",
"'",
"max. length",
1,
1,
3,
null,
0,
null,
"bpchar",
null,
null,
-9,
null,
null,
0,
0
}
}),
append = Table.Combine({types, newTypes})
in
append;
ODBC 드라이버에 대한 연결 문자열 Odbc.DataSource 및 Odbc.Query 함수에 대한 첫 번째 인수를 사용하여 설정됩니다. 값은 텍스트 또는 M 레코드일 수 있습니다. 레코드를 사용하는 경우 레코드의 각 필드는 연결 문자열 속성이 됩니다. 모든 연결 문자열 필드(또는 DSN
사용자가 시스템 수준 DSN을 미리 구성해야 하는 경우 필드)가 필요합니다Driver
. 자격 증명 관련 속성은 별도로 설정됩니다. 다른 속성은 드라이버 관련입니다.
아래 코드 조각은 새 데이터 원본 함수의 정의, 레코드 만들기 ConnectionString
및 Odbc.DataSource 함수 호출을 보여 줍니다 .
[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
let
ConnectionString = [
Driver = "SQL Server Native Client 11.0",
Server = server,
MultiSubnetFailover = "Yes",
ApplicationIntent = "ReadOnly",
APP = "PowerBICustomConnector"
],
OdbcDatasource = Odbc.DataSource(ConnectionString)
in
OdbcDatasource;