Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Sistema de Plataforma de Análise (PDW)
Importante
SQL Server Native Client (SNAC) não é fornecido com:
- SQL Server 2022 (16.x) e versões posteriores
- SQL Server Management Studio 19 e versões posteriores
O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.
Para novos projetos, use um dos seguintes drivers:
Para o SQLNCLI fornecido como componente do Mecanismo de Base de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção ao Ciclo de Vida de Suporte .
O SQL Server 2005 (9.x) introduziu tipos definidos pelo utilizador (UDTs). Os UDTs estendem o sistema de tipos SQL ao permitir armazenar objetos e estruturas de dados personalizadas numa base de dados SQL Server. As UDTs podem conter vários tipos de dados e podem ter comportamentos, diferenciando-os dos tipos de dados de alias tradicionais que consistem em um único tipo de dados do sistema SQL Server. Os UDTs são definidos usando qualquer uma das linguagens suportadas pelo .NET common language runtime (CLR) que produzem código verificável. Isto inclui C# e Visual Basic .NET. Os dados são expostos como campos e propriedades de uma classe ou estrutura .NET, e os comportamentos são definidos pelos métodos da classe ou estrutura.
Um UDT pode ser usado como definição de coluna de uma tabela, como variável num lote Transact-SQL, ou como argumento de uma função Transact-SQL ou procedimento armazenado.
Provedor OLE DB do SQL Server Native Client
O fornecedor SQL Server Native Client OLE DB suporta UDTs como tipos binários com informação de metadados, o que permite gerir UDTs como objetos. As colunas UDT são expostas como DBTYPE_UDT, e os seus metadados são expostos através da interface principal OLE DB IColumnRowset e da nova interface ISSCommandWithPares .
Observação
O método IRowsetFind::FindNextRow não funciona com o tipo de dados UDT. DB_E_BADCOMPAREOP é devolvido se o UDT for usado como tipo de coluna de pesquisa.
Ligações e Coerções de Dados
A tabela seguinte descreve a ligação e coerção que ocorrem ao utilizar os tipos de dados listados com um SQL Server UDT. As colunas UDT são expostas através do fornecedor SQL Server Native Client OLE DB como DBTYPE_UDT. Pode obter metadados através dos conjuntos de linhas de esquema apropriados para gerir os seus próprios tipos definidos como objetos.
| Tipo de dados | Para Servidor UDT |
Para Servidor não-UDT |
Do servidor UDT |
Do servidor não-UDT |
|---|---|---|---|---|
| DBTYPE_UDT | Suportado 6 | Erro1 | Suportado 6 | Erro5 |
| DBTYPE_BYTES | Suportado 6 | N/D2 | Suportado 6 | N/D2 |
| DBTYPE_WSTR | Suportado 3,6 | N/D2 | Suportou 4,6 | N/D2 |
| DBTYPE_BSTR | Suportado 3,6 | N/D2 | Suportado 4 | N/D2 |
| DBTYPE_STR | Suportado 3,6 | N/D2 | Suportou 4,6 | N/D2 |
| DBTYPE_IUNKNOWN | Não suportado | N/D2 | Não suportado | N/D2 |
| DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) | Suportado 6 | N/D2 | Suportado 4 | N/D2 |
| DBTYPE_VARIANT (VT_BSTR) | Suportado 3,6 | N/D2 | N/A | N/D2 |
1Se um tipo de servidor diferente de DBTYPE_UDT for especificado com ICommandWithParameters::SetParameterInfo e o tipo de acessório for DBTYPE_UDT, ocorre um erro quando a instrução é executada (DB_E_ERRORSOCCURRED; o estado do parâmetro é DBSTATUS_E_BADACCESSOR). Caso contrário, os dados são enviados para o servidor, mas este devolve um erro indicando que não há conversão implícita de UDT para o tipo de dado do parâmetro.
2Para além do âmbito deste tema.
3 Ocorre a conversão de dados de uma cadeia hexadecimal para dados binários.
4 Ocorre a conversão de dados binários para cadeia hexadecimal.
5A validação pode ocorrer no momento de criar acessórios, ou no momento de buscar, quando o erro é DB_E_ERRORSOCCURRED, com o estado de ligação definido para DBBINDSTATUS_UNSUPPORTEDCONVERSION.
6BY_REF podem ser usadas.
DBTYPE_NULL e DBTYPE_EMPTY podem ser atribuídos a parâmetros de entrada, mas não a parâmetros ou resultados de saída. Quando atribuído a parâmetros de entrada, o estado deve ser definido para DBSTATUS_S_ISNULL ou DBSTATUS_S_DEFAULT.
DBTYPE_UDT também podem ser convertidos para DBTYPE_EMPTY e DBTYPE_NULL, mas DBTYPE_NULL e DBTYPE_EMPTY não podem ser convertidos em DBTYPE_UDT. Isto é consistente com DBTYPE_BYTES.
Observação
Uma nova interface é usada para lidar com UDTs como parâmetros, ISSCommandWithParameters, que herda de ICommandWithParameters. As aplicações devem usar esta interface para definir pelo menos a SSPROP_PARAM_UDT_NAME do conjunto de propriedades DBPROPSET_SQLSERVERPARAMETER para os parâmetros UDT. Se isto não for feito, o ICommand::Execute devolverá DB_E_ERRORSOCCURRED. Esta interface e conjunto de propriedades são descritos mais adiante neste tópico.
Se um tipo definido pelo utilizador for inserido numa coluna que não seja suficientemente grande para conter todos os seus dados, o ICommand::Execute devolverá S_OK com o estado de DB_E_ERRORSOCCURRED.
As conversões de dados fornecidas pelos serviços centrais OLE DB (IDataConvert) não são aplicáveis a DBTYPE_UDT. Não são suportadas outras fixações.
Adições e Alterações ao Conjunto de Linhas do OLE DB
O SQL Server Native Client adiciona novos valores ou alterações a muitos dos conjuntos principais de esquemas do OLE DB.
O Conjunto de Linhas de Esquemas PROCEDURE_PARAMETERS
As seguintes adições foram feitas ao conjunto de linhas do esquema PROCEDURE_PARAMETERS.
| Nome da coluna | Tipo | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | O identificador de nome em três partes. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | O identificador de nome em três partes. |
| SS_UDT_NAME | DBTYPE_WSTR | O identificador de nome em três partes. |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | O Nome Qualificado da Assembleia, que inclui o nome do tipo e toda a identificação do conjunto necessária para ser referenciada pelo CLR. |
O Conjunto de Linhas de Esquemas SQL_ASSEMBLIES
O fornecedor SQL Server Native Client OLE DB expõe um novo conjunto de linhas de esquema específico do fornecedor que descreve os UDTs registados. O servidor ASSEMBLY pode ser especificado como um DBTYPE_WSTR, mas não está presente no conjunto de linhas. Se não for especificado, o conjunto de linhas irá automaticamente para o servidor atual. O conjunto de linhas do esquema SQL_ASSEMBLIES está definido na tabela seguinte.
| Nome da coluna | Tipo | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | O nome do catálogo da assembleia que contém o tipo. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | O nome do esquema, ou nome do proprietário, do conjunto que contém o tipo. Embora os assemblies sejam definidos por base de dados e não por esquema, continuam a ter um proprietário que está refletido aqui. |
| ASSEMBLY_NAME | DBTYPE_WSTR | O nome da assembleia que contém o tipo. |
| ASSEMBLY_ID | DBTYPE_UI4 | O id do objeto do assembly que contém o tipo. |
| PERMISSION_SET | DBTYPE_WSTR | Um valor que indica o âmbito de acesso para a assembleia. Os valores incluem "SEGURO", "EXTERNAL_ACCESS" e "INSEGURO". |
| ASSEMBLY_BINARY | DBTYPE_BYTES | A representação binária da assembleia. |
O conjunto de linhas do esquema SQL_ASSEMBLIES_ DEPENDENCIES
SQL Server Native Client OLE DB expõe um novo conjunto de linhas de esquema específico do fornecedor que descreve as dependências assembly para um servidor especificado. ASSEMBLY_SERVER pode ser especificado pelo chamador como um DBTYPE_WSTR, mas não está presente no conjunto de linhas. Se não for especificado, o conjunto de linhas irá automaticamente para o servidor atual. O conjunto de linhas do esquema SQL_ASSEMBLY_DEPENDENCIES está definido na tabela seguinte.
| Nome da coluna | Tipo | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | O nome do catálogo da assembleia que contém o tipo. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | O nome do esquema, ou nome do proprietário, do conjunto que contém o tipo. Embora os assemblies sejam definidos por base de dados e não por esquema, continuam a ter um proprietário, o que é refletido aqui. |
| ASSEMBLY_ID | DBTYPE_UI4 | O ID do objeto da assembleia. |
| REFERENCED_ASSEMBLY_ID | DBTYPE_UI4 | O id do objeto da montagem referenciada. |
O Conjunto de Linhas de Esquemas SQL_USER_TYPES
O fornecedor de OLE DB do SQL Server Native Client expõe um novo conjunto de linhas de esquema, SQL_USER_TYPES, que descreve quando os UDTs registados para um servidor especificado são adicionados. UDT_SERVER deve ser especificado como DBTYPE_WSTR pelo chamador, mas não está presente no conjunto de linhas. O conjunto de linhas do esquema SQL_USER_TYPES está definido na tabela seguinte.
| Nome da coluna | Tipo | Description |
|---|---|---|
| UDT_CATALOGNAME | DBTYPE_WSTR | Para colunas UDT, esta propriedade é uma cadeia que especifica o nome do catálogo onde o UDT está definido. |
| UDT_SCHEMANAME | DBTYPE_WSTR | Para colunas UDT, esta propriedade é uma cadeia que especifica o nome do esquema onde o UDT está definido. |
| UDT_NAME | DBTYPE_WSTR | O nome do conjunto que contém a classe UDT. |
| UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Nome completo do tipo (AQN) inclui o nome do tipo com prefixo por espaço de nomes, se aplicável. |
O Conjunto de Linhas do Esquema COLUMNS
As adições ao conjunto de linhas do esquema COLUMNS incluem as seguintes colunas.
| Nome da coluna | Tipo | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | Para colunas UDT, esta propriedade é uma cadeia que especifica o nome do catálogo onde o UDT está definido. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | Para colunas UDT, esta propriedade é uma cadeia que especifica o nome do esquema onde o UDT está definido. |
| SS_UDT_NAME | DBTYPE_WSTR | O nome da UDT |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Nome completo do tipo (AQN) inclui o nome do tipo com prefixo por espaço de nomes, se aplicável. |
Adições e Alterações do Conjunto de Propriedades do OLE DB
O SQL Server Native Client adiciona novos valores ou alterações a muitos dos conjuntos principais de propriedades do OLE DB.
O Conjunto de Propriedades DBPROPSET_SQLSERVERPARAMETER
Para suportar UDTs através da base de dados olee, o SQL Server Native Client implementa o novo conjunto de propriedades DBPROPSET_SQLSERVERPARAMETER que contém os seguintes valores.
| Nome | Tipo | Description |
|---|---|---|
| SSPROP_PARAM_UDT_CATALOGNAME | DBTYPE_WSTR | O identificador de nome em três partes. Para parâmetros UDT, esta propriedade é uma cadeia que especifica o nome do catálogo onde o tipo definido pelo utilizador está definido. |
| SSPROP_PARAM_UDT_SCHEMANAME | DBTYPE_WSTR | O identificador de nome em três partes. Para parâmetros UDT, esta propriedade é uma cadeia que especifica o nome do esquema onde o tipo definido pelo utilizador está definido. |
| SSPROP_PARAM_UDT_NAME | DBTYPE_WSTR | O identificador de nome em três partes. Para colunas UDT, esta propriedade é uma cadeia que especifica o nome da única parte do tipo definido pelo utilizador. |
SSPROP_PARAM_UDT_NAME é obrigatório. SSPROP_PARAM_UDT_CATALOGNAME e SSPROP_PARAM_UDT_SCHEMANAME são opcionais. Se alguma das propriedades for especificada incorretamente DB_E_ERRORSINCOMMAND será devolvida. Se tanto SSPROP_PARAM_UDT_CATALOGNAME como SSPROP_PARAM_UDT_SCHEMANAME não forem especificados, então o UDT deve ser definido na mesma base de dados e esquema que a tabela. Se a definição do UDT não estiver no mesmo esquema da tabela (mas estiver na mesma base de dados), então SSPROP_PARAM_UDT_SCHEMANAME deve ser especificada. Se a definição do UDT estiver numa base de dados diferente, então tanto SSPROP_PARAM_UDT_CATALOGNAME como SSPROP_PARAM_UDT_SCHEMANAME devem ser especificados.
O Conjunto de Propriedades DBPROPSET_SQLSERVERCOLUMN
Para suportar a criação de tabelas na interface ITableDefinition , o SQL Server Native Client adiciona as seguintes três novas colunas ao conjunto de propriedades DBPROPSET_SQLSERVERCOLUMN.
| Nome | Description | Tipo | Description |
|---|---|---|---|
| SSPROP_COL_UDT_CATALOGNAME | UDT_CATALOGNAME | VT_BSTR | Para colunas do tipo DBTYPE_UDT, esta propriedade é uma cadeia que especifica o nome do catálogo onde o UDT está definido. |
| SSPROP_COL_UDT_SCHEMANAME | UDT_SCHEMANAME | VT_BSTR | Para colunas do tipo DBTYPE_UDT, esta propriedade é uma cadeia que especifica o nome do esquema onde o UDT está definido. |
| SSPROP_COL_UDT_NAME | UDT_NAME | VT_BSTR | Para colunas do tipo DBTYPE_UDT, esta propriedade é uma cadeia que especifica o nome da única peça do UDT. Para outros tipos de coluna, esta propriedade devolve uma cadeia vazia. |
Observação
Os UDTs não aparecem no conjunto de linhas do esquema PROVIDER_TYPES. Todas as colunas têm acesso de leitura e escrita.
O ADO referir-se-á a estas propriedades usando a entrada correspondente na coluna Descrição.
SSPROP_COL_UDTNAME é obrigatório. SSPROP_COL_UDT_CATALOGNAME e SSPROP_COL_UDT_SCHEMANAME são opcionais. Se alguma das propriedades estiver especificada incorretamente, DB_E_ERRORSINCOMMAND será devolvido.
Se nem SSPROP_COL_UDT_CATALOGNAME nem SSPROP_COL_UDT_SCHEMANAME for especificado, o UDT deve ser definido na mesma base de dados e esquema que a tabela.
Se a definição UDT não estiver no mesmo esquema da tabela (mas estiver na mesma base de dados), SSPROP_COL_UDT_SCHEMANAME deve ser especificado.
Se a definição UDT estiver numa base de dados diferente, tanto SSPROP_COL_UDT_CATALOGNAME como SSPROP_COL_UDT_SCHEMANAME devem ser especificados.
Adições e Alterações da Interface OLE DB
O SQL Server Native Client adiciona novos valores ou alterações a muitas das interfaces principais do OLE DB.
A Interface ISSCommandWithParameters
Para suportar UDTs através da base de dados olee, o SQL Server Native Client implementa várias alterações, incluindo a adição da interface ISSCommandWithParities . Esta nova interface herda da interface central OLE DB ICommandWithParameters. Além dos três métodos herdados do ICommandWithParameters; GetParameterInfo, MapParameterNames e SetParameterInfo; O ISSCommandWithParameters fornece os métodos GetParameterProperties e SetParameterProperties que são usados para lidar com tipos de dados específicos do servidor.
Observação
A interface ISSCommandWithParameters também utiliza a nova estrutura SSPARAMPROPS.
A Interface IColumnsRowSet
Para além da interface ISSCommandWithPares , o SQL Server Native Client também adiciona novos valores ao conjunto de linhas retornado ao chamar o método IColumnsRowset::GetColumnRowset , incluindo o seguinte.
| Nome da Coluna | Tipo | Description |
|---|---|---|
| DBCOLUMN_SS_UDT_CATALOGNAME | DBTYPE_WSTR | Um identificador de nome de catálogo UDT. |
| DBCOLUMN_SS_UDT_SCHEMANAME | DBTYPE_WSTR | Um identificador de nome de esquema UDT. |
| DBCOLUMN_SS_UDT_NAME | DBTYPE_WSTR | Um identificador de nome UDT. |
| DBCOLUMN_SS_ASSEMBLY_TYPENAME | DBTYPE_WSTR | O nome qualificado da assembleia, que inclui o nome do tipo e toda a identificação do conjunto necessária para ser referenciada pelo CLR. |
Pode diferenciar uma coluna UDT de servidor de outros tipos binários quando o DBCOLUMN_TYPE está definido para DBTYPE_UDT olhando para os metadados UDT adicionados especificados acima. Se esses dados estiverem parcialmente completos, o tipo de servidor é um UDT. Para tipos de servidor que não são UDT, estas colunas são sempre devolvidas como NULL.
Driver ODBC de Cliente Nativo do SQL Server
Foram feitas várias alterações no driver ODBC do SQL Server Native Client para suportar UDTs. O driver SQL Server Native Client ODBC mapeia o SQL Server UDT para SQL_SS_UDT identificador de tipo de dado SQL específico do driver. As colunas UDT são superficiadas como SQL_SS_UDT. Se mapear explicitamente uma coluna UDT para outro tipo numa instrução SQL usando os métodos ToString ou ToXMLString do UDT ou através da função CAST/CONVERT , o tipo da coluna no conjunto de resultados reflete o tipo real para o qual a coluna foi convertida
SQLColAttribute, SQLDescribeParam, SQLGetDescField
Foram adicionados quatro novos campos descritores específicos de cada driver para fornecer informação adicional para uma coluna UDT de um conjunto de resultados, ou para um parâmetro UDT de procedimento armazenado/consulta parametrizada, a ser recuperado através das funções SQLColAttribute, SQLDescribeParam e SQLGetDescField .
Os quatro novos campos de descrição que foram adicionados são SQL_CA_SS_UDT_CATALOG_NAME, SQL_CA_SS_UDT_SCHEMA_NAME, SQL_CA_SS_UDT_TYPE_NAME e SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME.
SQLColumns, SQLProcedureColumns
Além disso, três novas colunas específicas do driver são adicionadas ao conjunto de resultados retornado pelas funções SQLColumns e SQLProcedureColumns para fornecer informação adicional sobre uma coluna do conjunto de resultados UDT ou um parâmetro UDT. Estas três novas colunas são SS_UDT_CATALOG_NAME, SS_UDT_SCHEMA_NAME e SS_UDT_ASSEMBLY_TYPE_NAME.
Conversões Suportadas
Ao converter de SQL para tipos de dados C, SQL_C_WCHAR, SQL_C_BINARY e SQL_C_CHAR podem todos ser convertidos para SQL_SS_UDT. Note-se, no entanto, que os dados binários são convertidos para uma cadeia hexadecimal ao converter dos tipos de dados SQL_C_WCHAR e SQL_C_CHAR SQL.
Ao converter de C para tipos de dados SQL, SQL_C_WCHAR, SQL_C_BINARY e SQL_C_CHAR podem todos ser convertidos para SQL_SS_UDT. Note-se, no entanto, que os dados binários são convertidos para uma cadeia hexadecimal ao converter dos tipos de dados SQL_C_WCHAR e SQL_C_CHAR SQL.
Ver também
Funcionalidades nativas do cliente SQL Server
ISSCommandWithParameters (OLE DB)