Eu tenho um pacote SSIS que executa consultas simples em uma lista de servidores. Estou tendo um problema com uma consulta simples específica: se existir uma tabela, obtenha o número de linhas. Caso contrário informe "não existe".
O código SQL funciona no Management Studio se eu me conectar diretamente, mas quando me conecto com o SSIS usando uma tarefa de fluxo de dados ADO NET para executar o código, recebo um erro de validação. Parece-me que o SSIS está examinando todos os objetos no código para ver se eles existem antes de executar. Ele falha antes mesmo de tentar executar.
Se eu comentar "selecionar contagem(*) da Tabela1", tudo funcionará sem problemas.
Os servidores distribuídos estão todos usando o SQL Server 2008R2 Express Edition.
declare @Result varchar(1000),
@Table1Count int
select @Result = '',
@Table1Count = 0
-- If tables exist, get the counts
IF EXISTS(select 1 from information_schema.Tables where Table_Name = 'Table1')
BEGIN
select @Table1Count = count(*) from Table1
select @Result = 'Table1: ' + convert(varchar(12),@Table1Count)
END
ELSE
select @Result = 'Tables do not exist'
Alguma ideia?
Você pode tentar executar a instrução ofensiva usando
sp_executesql
.Uma ideia - em vez de usar um script para obter a contagem de linhas, por que não simplesmente criar uma variável SSIS e usar a tarefa Row Count no componente Data Flow? Tudo o que você precisa fazer é mapear a tarefa Row Count para a variável que você criou. Então você pode fazer o que quiser com o valor da variável. Você pode precisar usar os componentes Conditional Split ou Lookup no Data Flow para verificar a existência da tabela antes que a Row Count seja atingida, mas eu tentaria de qualquer maneira.