Trabalhando com conjuntos de resultados na tarefa Executar SQL

Em um pacote Integration Services, se um conjunto de resultados é retornado para a tarefa Executar SQL ou não depende do tipo de comando SQL que a tarefa usa. Por exemplo, uma instrução SELECT normalmente retorna um conjunto de resultados, mas uma instrução INSERT não.

O que o conjunto de resultados contém também varia com o comando SQL. Por exemplo, o conjunto de resultados de uma instrução SELECT pode conter nenhuma linha, uma linha ou muitas linhas. No entanto, o conjunto de resultados de uma instrução SELECT que retorna uma contagem ou soma tem apenas uma única linha.

Trabalhar com conjuntos de resultados em uma tarefa Executar SQL é mais do que apenas saber se o comando SQL retorna um conjunto de resultados e o que ele contém. Há requisitos de uso e diretrizes adicionais para a utilização bem-sucedida dos conjuntos de resultados na tarefa Executar SQL. Esses requisitos de uso e diretrizes são abordados no restante deste tópico:

  • Especificando um tipo de conjunto de resultados

  • Populando uma variável com um conjunto de resultados

  • Configurando resultados conjuntos de resultados no Editor da Tarefa Executar SQL

Especificando um tipo de conjunto de resultados

O a tarefa Executar SQL dá suporte aos seguintes tipos de conjuntos de resultados:

  • O conjunto de resultados Nenhum é usado quando a consulta não retorna nenhum resultado. Por exemplo, esse conjunto de resultados é usado para consultas que adicionam, alteram e excluem registros em uma tabela.

  • O conjunto de resultados Linha simples é usado quando a consulta retorna apenas uma linha. Por exemplo, esse conjunto de resultados é usado para uma instrução SELECT que retorna uma contagem ou soma.

  • O Conjunto de resultados completo é usado quando a consulta retorna várias linhas. Por exemplo, este conjunto de resultados é usado para uma instrução SELECT que recupera todas as linhas em uma tabela.

  • O conjunto de resultados XML é usado quando a consulta retorna um conjunto de resultados em um formato XML. Por exemplo, esse conjunto de resultados é usado para uma instrução SELECT que inclui uma cláusula FOR XML.

Se a tarefa Executar SQL usar o Conjunto de resultados completo e a consulta retornar vários conjuntos de linhas, a tarefa retornará apenas o primeiro. Se este conjunto de linhas gerar um erro, a tarefa informará o erro. Se outros conjuntos de linhas gerarem erros, a tarefa não os informará.

Dependendo do tipo de gerenciador de conexões, os valores que são retornados pela instrução SQL que ainda não são cadeias de caracteres poderão ser convertidos de modo implícito ou explícito em cadeias de caracteres. Um gerenciador de conexões ADO ou ODBC converte implicitamente valores de retorno em cadeias de caracteres. Um gerenciador de conexões OLE DB converte explicitamente os valores de retorno dos tipos de dados DBTYPE_I8, DBTYPE_UI8, DBTYPE_NUMERIC, DBTYPE_GUID e DBTYPE_BYTES em cadeias de caracteres. No entanto, um gerenciador de conexões ADO.NET não converte valores de retorno em cadeias de caracteres.

Populando uma variável com um conjunto de resultados

Você poderá associar o conjunto de resultados retornado por uma consulta a uma variável definida pelo usuário se o tipo de conjunto de resultados for uma única linha, um conjunto de linhas ou XML.

Se o tipo de conjunto resultante for Linha simples, você poderá associar uma coluna no resultado de retorno a uma variável usando o nome da coluna como o nome do conjunto de resultados ou pode usar a posição ordinal da coluna na lista de colunas como o nome do conjunto de resultados. Por exemplo, o nome do conjunto de resultados da consulta SELECT Color FROM Production.Product WHERE ProductID = ? pode ser Color ou 0. Se a consulta retornar várias colunas e você quiser acessar os valores em todas elas, associe cada coluna a uma variável diferente. Se você mapear as colunas para variáveis usando números como nomes do conjunto de resultados, os números refletirão a ordem em que as colunas aparecerão na lista de colunas da consulta. Por exemplo, na consulta SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?, você usa 0 para a coluna Color e 1 para a coluna ListPrice. A capacidade de usar um nome de coluna como o nome do conjunto de resultados depende do provedor que a tarefa está configurada para usar. Nem todos os provedores tornam os nomes das colunas disponíveis.

Algumas consultas que retornam um único valor podem não incluir nomes de colunas. Por exemplo, a instrução SELECT COUNT (*) FROM Production.Product não retorna nenhum nome de coluna. Você pode acessar o resultado de retorno usando a posição ordinal, 0, como o nome do resultado. Para acessar o resultado de retorno por nome de coluna, a consulta deve incluir uma cláusula de <nome de alias> AS para fornecer um nome de coluna. A instrução SELECT COUNT (*)AS CountOfProduct FROM Production.Product fornece a coluna CountOfProduct. Você pode acessar a coluna de resultado de retorno que usa o nome de coluna CountOfProduct ou a posição ordinal 0.

Se o tipo de conjunto de resultados for Conjunto de resultados completo ou XML, será necessário usar 0 como o nome de conjunto de resultados.

Quando você mapeia uma variável para um conjunto de resultados com o tipo de conjunto de resultados Linha simples, a variável deve ter um tipo de dados compatível com o tipo de dados da coluna que o conjunto de resultados contém. Por exemplo, um conjunto de resultados que contém uma coluna com um tipo de dados String não pode ser mapeado para uma variável com um tipo de dados numérico. Um conjunto de resultados XML somente pode ser mapeado para uma variável com o tipo de dados String ou Object. Se a variável tiver o tipo de dados String, a tarefa Executar SQL retorna uma cadeia de caracteres e a fonte XML pode consumir os dados XML. Se a variável tiver o tipo de dados Object, a tarefa Executar SQL retornará um objeto do Modelo de Objeto de Documento (DOM). Um Conjunto de resultados completo deve ser mapeado para uma variável do tipo de dados Object. O resultado de retorno é um objeto de conjunto de linhas. Você pode escrever tarefas personalizadas que navegam no objeto do conjunto de linhas e acessam informações sobre as colunas e os dados no conjunto de linhas.

A tabela a seguir resume os tipos de dados de variáveis que podem ser mapeadas para conjuntos de resultados.

Tipo de conjunto de resultados

Tipo de dados da variável

Tipo de objeto

Linha simples

Qualquer tipo compatível com a coluna de tipo no conjunto de resultados.

Não se aplica

Conjunto de resultados completo

Object

Se a tarefa usar um gerenciador de conexões nativo, incluindo os gerenciadores de conexões ADO, OLE DB, Excel e ODBC, o objeto retornado será Recordset ADO.

Se a tarefa usar um gerenciador de conexões gerenciado, como o gerenciador de conexões ADO.NET, o objeto retornado será um System.Data.DataSet.

XML

String

String

XML

Object

Se a tarefa usar um gerenciador de conexões nativo, inclusive os gerenciadores de conexões ADO, OLE DB, Excel e ODBC, o objeto retornado será MSXML6.IXMLDOMDocument.

Se a tarefa usar um gerenciador de conexões gerenciado, como o gerenciador de conexões ADO.NET, o objeto retornado será um System.Xml.XmlDocument.

A variável pode ser definida no escopo da tarefa Executar SQL ou do pacote. Se a variável tiver escopo de pacote, o conjunto de resultados estará disponível para outras tarefas e contêineres no pacote e para qualquer pacote executado pelas tarefas Executar pacote ou Executar Pacotes do DTS 2000.

Quando você mapeia uma variável para um conjunto de resultados de Linha simples, os valores retornados pela instrução SQL que ainda não são cadeias de caracteres poderão ser convertidos em cadeias de caracteres. Se essa conversão ocorrer ou se será implícita ou explícita dependerá do tipo de gerenciador de conexões usado:

  • Com um gerenciador de conexões ADO.NET, a conversão não ocorre.

  • Com um gerenciador de conexões ADO ou ODBC, essa conversão ocorre implicitamente.

  • Com um gerenciador de conexões OLE DB ou Excel, o gerenciador converte explicitamente valores dos tipos DBTYPE_NUMERIC, DBTYPE_GUID e DBTYPE_BYTES em cadeias de caracteres.

Para obter informações sobre como carregar um conjunto de resultados em uma variável, consulte Como mapear conjuntos de resultados para variáveis em uma tarefa Executar SQL.

Configurando conjuntos de resultados na tarefa Executar SQL

Para obter mais informações sobre as propriedades dos conjuntos de resultados que podem ser definidas no Designer SSIS, clique no seguinte tópico:

Para obter mais informações sobre como definir essas propriedades no SSIS Designer, clique no tópico a seguir:

Recursos externos

Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os mais recentes downloads, artigos, exemplos e vídeos da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN ou TechNet:

Para receber uma notificação automática sobre essas atualizações, assine os feeds RSS disponíveis na página.