Partilhar via


Table-Valued Campos Descritor de Parâmetros

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure do Azure Synapse AnalyticsAnalytics Platform System (PDW)

O suporte para parâmetros com valor de tabela inclui novos campos específicos do SQL Server em descritores de parâmetros de aplicativo ODBC (APDs) e descritores de parâmetros de implementação (IPDs).

Comentários

Designação Localização Tipo Descrição
SQL_CA_SS_TYPE_NAME DPI SQLTCHAR* O nome do tipo de servidor do parâmetro com valor de tabela.

Quando um nome de tipo de parâmetro com valor de tabela é especificado em uma chamada para SQLBindParameter, ele sempre deve ser especificado como um valor Unicode, mesmo em aplicativos criados como aplicativos ANSI. O valor usado para o parâmetro StrLen_or_IndPtr deve ser SQL_NTS ou o comprimento da cadeia de caracteres do nome multiplicado por sizeof(WCHAR).

Quando um nome de tipo de parâmetro com valor de tabela é especificado via SQLSetDescField, ele pode ser especificado usando um literal que está em conformidade com a maneira como o aplicativo é criado. O Gerenciador de Driver ODBC executará qualquer conversão Unicode necessária.
SQL_CA_SS_TYPE_CATALOG_NAME (somente leitura) DPI SQLTCHAR* O catálogo onde o tipo é definido.
SQL_CA_SS_TYPE_SCHEMA_NAME DPI SQLTCHAR* O esquema onde o tipo é definido.

Os aplicativos não devem definir SQL_CA_SS_TYPE_CATALOG_NAME para parâmetros com valor de tabela. Isso retornará um SQL_ERROR e registrará um registro de diagnóstico com SQLSTATE = HY091 e a mensagem "Identificador de campo descritor inválido".

Os seguintes atributos de instrução e campos de cabeçalho do descritor aplicam-se a parâmetros com valor de tabela quando o foco do parâmetro é definido como um parâmetro com valor de tabela:

Designação Localização Tipo Descrição
SQL_ATTR_PARAMSET_SIZE

(Isto é equivalente a SQL_DESC_ARRAY_SIZE na APD.)
APD SQLUINTEGER O tamanho da matriz das matrizes de buffer para um parâmetro com valor de tabela. Este é o número máximo de linhas que os buffers acomodarão ou o tamanho dos buffers em linhas; O próprio valor do parâmetro com valor de tabela pode ter mais ou menos linhas do que os buffers podem conter. O padrão é 1.

Nota: Se SQL_SOPT_SS_PARAM_FOCUS estiver definido como seu valor padrão de 0, SQL_ATTR_PARAMSET_SIZE se refere à instrução e especifica o número de conjuntos de parâmetros. Se SQL_SOPT_SS_PARAM_FOCUS for definido como o ordinal de um parâmetro com valor de tabela, ele se refere ao parâmetro com valor de tabela e especifica o número de linhas por parâmetro definido para o parâmetro com valor de tabela.
SQL_ATTR_PARAM _BIND_TYPE APD SQLINTEGER O padrão é SQL_PARAM_BIND_BY_COLUMN.

Para selecionar a vinculação em linha, esse campo é definido para o comprimento da estrutura ou uma instância de um buffer que será vinculado a um conjunto de linhas de parâmetros com valor de tabela. Esse comprimento deve incluir espaço para todas as colunas acopladas e qualquer preenchimento da estrutura ou buffer. Isso garante que, quando o endereço de uma coluna acoplada for incrementado com o comprimento especificado, o resultado apontará para o início da mesma coluna na próxima linha. Ao usar o tamanho do operador em ANSI C, esse comportamento é garantido.
SQL_ATTR_PARAM_BIND_OFFSET_PTR APD SQLINTEGER* O padrão é um ponteiro nulo.

Se esse campo não for nulo, o driver cancela a referência do ponteiro, adiciona o valor desreferenciado a cada um dos campos adiados no registro descritor (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR e SQL_DESC_OCTET_LENGTH_PTR) e usa os novos valores de ponteiro para acessar valores de dados.

Esses campos só são válidos com parâmetros com valor de tabela e são ignorados para outros tipos de dados.

SQL_CA_SS_TYPE_NAME é opcional para chamadas de procedimento armazenado. Ele deve ser especificado para instruções SQL que não são chamadas de procedimento para permitir que o servidor determine o tipo do parâmetro com valor de tabela.

Se o nome do tipo for necessário e o tipo de tabela para o parâmetro com valor de tabela for definido em um esquema diferente do procedimento armazenado, SQL_CA_SS_TYPE_SCHEMA_NAME deverá ser especificado no descritor de parâmetro de implementação (IPD). Caso contrário, o servidor não poderá determinar o tipo do parâmetro com valor de tabela. Isso resultará em um erro quando você chamar SQLExecute ou SQLExecDirect. O erro terá SQLSTATE= 07006 e a mensagem "Violação de atributo de tipo de dados restrito".

As colunas de parâmetros com valor de tabela podem usar a associação em linha ou em coluna. O padrão é a vinculação em colunas. A vinculação em linha pode ser especificada definindo SQL_ATTR_PARAM_BIND_TYPE e SQL_ATTR_ PARAM_BIND_OFFSET_PTR. Isso é análogo à vinculação em linha de colunas e parâmetros.

SQL_CA_SS_TYPE_CATALOG_NAME e SQL_CA_SS_TYPE_SCHEMA_NAME também podem ser usados para recuperar o catálogo e o esquema associados aos parâmetros de tipo definidos pelo usuário CLR. Essas são alternativas aos atributos de esquema de catálogo específicos de tipo existentes para esses tipos.

Ver também

Parâmetros Table-Valued (ODBC)