AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-212659

questionto42standswithUkraine's questions

Martin Hope
questionto42
Asked: 2024-08-07 20:30:54 +0800 CST

"Falha no login do usuário 'AD\MyUser'." ... 0x80004005 "Não é possível abrir o banco de dados "MyDatabase" solicitado pelo login. O login falhou."

  • 5

A mensagem de erro completa:

MyPackageName:Erro: Código de erro SSIS DTS_E_OLEDBERROR. Ocorreu um erro de banco de dados OLE. Código de erro: 0x80004005. um registro OLE DB está disponível. Fonte: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Descrição: "Falha no login do usuário 'AD\MyUser'.". Um registro OLE DB está disponível. Fonte: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Descrição: "Não é possível abrir o banco de dados "MyDatabase" solicitado pelo login. O login falhou.".

E uma mensagem de erro de acompanhamento:

MyDataFlowTaskName:Erro: Código de erro SSIS DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. A chamada do método AcquireConnectionm para o gerenciador de conexões "MyConnectionManager" falhou com o código de erro 0xC0202009. Pode haver mensagens de erro postadas antes disso com mais informações sobre o motivo da falha na chamada do método AcquireConnection.

Preciso executar uma SELECTconsulta TSQL em um banco de dados. Como posso contornar o erro de login?

ssis
  • 1 respostas
  • 51 Views
Martin Hope
questionto42
Asked: 2024-08-07 20:22:57 +0800 CST

Como posso saber qual usuário executa um pacote no Catálogo do Integration Services (SSISDB) do SQL Server Agent?

  • 5

Preciso descobrir o usuário que executa os pacotes SSIS no SSISDB, mas não consigo encontrá-lo. Existem tantos usuários e usuários do sistema conectados a outros bancos de dados que não consigo aprender com esse padrão qual usuário é necessário. Não sei pelo nome qual deles faz isso no final.

Como posso saber qual usuário executa um pacote no Catálogo do Integration Services (SSISDB) do SQL Server Agent?

ssis
  • 1 respostas
  • 22 Views
Martin Hope
questionto42
Asked: 2024-08-06 19:44:14 +0800 CST

Como evito o erro "Solicitação para execução do trabalho recusada porque o trabalho já está em execução" se nenhum trabalho for mostrado como "em execução" quando eu iniciar uma etapa escolhida?

  • 5

Não consigo iniciar o trabalho do SQLServer Agent mesmo que nada seja mostrado como em execução.

Histórico: eu estraguei tudo e esqueci depois

Eu tive apenas uma etapa em meu trabalho de teste e adicionei outra etapa. Meu objetivo era começar a partir do passo 2 apenas porque eu queria executar apenas o passo 2, não o passo 1, bastante demorado. Quando escolhi "começar do passo", ele simplesmente começou a ser executado sem me mostrar a escolha dos passos, e quando olhei para o trabalho, ele ainda tinha apenas uma etapa, e a etapa de longa duração estava em execução.

Meu primeiro palpite é que devo ter esquecido de adicionar a segunda etapa, fechando o menu sem salvar. Meu segundo palpite é que acabei de fechar a janela com o verde "Em execução", pensando que isso poderia interromper o trabalho, mas sei, por verificações posteriores, que o fechamento não está parando. Então esqueci disso durante algum outro trabalho.

Como posteriormente não consegui ver nenhuma caixa que dizia "Running", adicionei novamente o segundo passo e comecei a partir desse passo 2, e então surgiu o erro em questão.

insira a descrição da imagem aqui

O erro:

insira a descrição da imagem aqui

Falha no início do trabalho.

...

Erro do SQLServer Agent: solicitação para executar o trabalho .. (do usuário ..) recusada porque o trabalho já está em execução a partir de uma solicitação do usuário .. (Microsoft SQL Server, Erro 22022)

Claramente, a etapa 1 de longa duração ainda estava em execução em segundo plano. Mas eu não sabia mais disso.

Por isso fiz a pergunta:

Como evito o erro "Solicitação para execução do trabalho recusada porque o trabalho já está em execução" se nenhum trabalho for mostrado como "em execução" quando eu iniciar uma etapa escolhida?

sql-server
  • 1 respostas
  • 21 Views
Martin Hope
questionto42
Asked: 2024-07-27 05:29:34 +0800 CST

Como o fluxo de dados pode mostrar o número de valores alterados por uma Coluna Derivada que substitui uma determinada coluna se uma condição for atendida?

  • 5

Eu uso uma transformação de coluna derivada para substituir um valor assim que uma condição em duas outras colunas for atendida. Como posso ver no fluxo de dados com que frequência um valor muda com essa substituição? Existe uma maneira de mostrar isso na seta de saída ou de que outra forma posso mostrar as alterações dentro do fluxo de dados?

PS (não necessário para perguntas e respostas)

Quero verificar se a entrada da string é igual à saída da pesquisa. Mas às vezes, nomes (nomes e sobrenomes) têm mais de um nome no valor, como Taylor-Smith contra Smith ou Bob Thomas contra Bob. As pessoas podem se casar ou, às vezes, preencher seus dois primeiros nomes, de modo que os dados podem não corresponder a duas contas de dados mestre.

(DT_BOOL)(FINDSTRING(name,[Lookup.name],1)) ? 1 : [score_name]

O valor da coluna score_nameé substituído 1assim que for nameencontrado dentro de Lookup.name, caso contrário o valor é mantido entre 0 e 1.

"Nome na pesquisa?":

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Você poderia pegar qualquer outro exemplo, como Substituir valores da coluna? , a questão não depende do que é feito.

ssis
  • 1 respostas
  • 19 Views
Martin Hope
questionto42
Asked: 2024-06-21 19:42:53 +0800 CST

Como insiro um número bigint no SSIS?

  • 5

Esta é uma duplicata entre sites de Avaliar expressão com construtor de expressão - Stack Overflow . Queria compartilhar isso com capturas de tela e com uma pergunta mais ampla, já que você acessou o outro link apenas se procurar pelos erros. Obrigado, vá para a resposta lá.

Tento adicionar uma coluna bigint como uma nova coluna derivada, o que gera os erros:

Erro1:

O literal "12345678910" é muito grande para caber no tipo DT_I4. A magnitude do literal excede o tipo.

Erro2:

A tentativa de analisar a expressão "(DT_I8)12345678910" falhou e retornou o código de erro 0xC004707C. A expressão não pode ser analisada. Pode conter elementos inválidos ou pode não estar bem formado. Também pode haver um erro de falta de memória.

insira a descrição da imagem aqui

Pergunta

Como insiro um número bigint no SSIS?

Lenda

DT_I8 = número inteiro de 8 bytes
DT_I4 = número inteiro de 4 bytes

ssis
  • 1 respostas
  • 16 Views
Martin Hope
questionto42
Asked: 2024-06-21 17:08:11 +0800 CST

Como faço uma pesquisa de número inteiro DT_I4 de uma condição booleana em uma coluna derivada para uma coluna de pesquisa de número inteiro? Apenas um `0` corresponde, um `1` não

  • 5

Para fazer uma pesquisa, faça:

  • uma coluna derivada como a DT_I4entrada inteira de quatro bytes que pode ser um 0ou 1,
  • uma pesquisa em uma coluna da tabela de pesquisa que é um número inteiro de quatro bytes 0ou 1também.

Coluna de origem:

(DT_I4)(Check1 == "Check1_value")

Coluna de pesquisa:

Ver:

  • Construtor de valor de tabela (Transact-SQL) - Microsoft Learn
  • selecione sem from - SQL moderno
select * from 
values(0,'output_for_0')
,(1,'output_for_1')
t (lkp_value, lkp_output)

Com outras colunas para pesquisa ou saída, poderia ser assim:

insira a descrição da imagem aqui

Se eu não converter 0e 1para um tipo de dados escolhido, ele se tornará um número inteiro. Eu uso números inteiros, pois quero poupar o trabalho de converter cada número inteiro em um tipo de dados bit, pois você precisa fazer isso para cada valor em toda a consulta da tabela de pesquisa. Se você tiver apenas as duas linhas, você pode dizer que não importa escrever:

select * from 
values(cast(0 as bit),cast('output_for_0' as varchar(100)))
,(cast(1 as bit),cast('output_for_1' as varchar(100)))
t (lkp_value, lkp_output)

Mas eu gosto de mantê-lo em números inteiros simples para me poupar de conversões desagradáveis ​​para cada valor. Faço o mesmo com as outras colunas, não defino o comprimento varchar das colunas de texto e assim por diante, para que meus varchars fiquem varchar(45)na tabela de consulta, mas fiquem varchar(100)nas tabelas de entrada e destino. Você pode fazer isso de outra maneira.

Somente a pesquisa 0to 0funciona, enquanto a pesquisa 1to 1não, embora ambas sejam do mesmo tipo de dados.

Ambos (DT_I4)(Check1 == "Check1_value"e o valor de pesquisa 1se tornam o DT_I4número inteiro 1se a condição for atendida. Passei o número da coluna derivada para uma tabela de destino para verificar isso.

O que preciso fazer para pesquisar números inteiros provenientes de uma condição booleana em uma coluna derivada convertida como um número inteiro?

ssis
  • 1 respostas
  • 9 Views
Martin Hope
questionto42
Asked: 2024-05-07 20:10:14 +0800 CST

Como evito passar uma linha com NULL em um dos valores de coluna correspondentes para as linhas sem correspondência na ferramenta de suplemento KingswaySoft SSIS "Premium Lookup"?

  • 5

Mirar

Eu trabalho com a ferramenta complementar KingswaySoft SSIS "Premium Lookup", mas acho que a mesma pergunta pode surgir com a ferramenta integrada SSIS "Lookup".

Tento combinar um par de colunas duplas "first_name1" e "name1" e "first_name2" e "name2" e ambos os lados 1 e 2 às vezes têm valores NULL.

Se uma das colunas de pesquisa for NULL, toda a linha será passada para a saída "incomparável". A ferramenta Premium Lookup tem a seguinte aparência em um DFT: A entrada é passada para 32 linhas sem correspondência, pois um dos dois lados tem um valor NULL ou porque há um valor NULL em alguma outra coluna correspondente:

insira a descrição da imagem aqui

Meu objetivo é continuar combinando as colunas quando um NULL em uma delas for encontrado, para que a pesquisa continue e tente combinar as outras colunas também, enquanto a correspondência NULL deve ser:

  • ou 0% de correspondência
  • ou NULL e não é considerado a pontuação média.

Ambos seriam bons, pois tenho mais algumas colunas que geralmente combinam bem.

Peço um máximo de 5 correspondências e descarto qualquer correspondência da saída que tenha o mesmo ID da entrada primária, pois desejo encontrar apenas as entradas duplas. Portanto, devem ser mostrados até 5 "próximos vizinhos" para qualquer entrada que possa ter duplicatas nos dados mestre:

insira a descrição da imagem aqui

Por exemplo, se o primeiro nome não for conhecido em ambos os lados e até mesmo no campo de entrada primário, eu ainda gostaria de obter uma correspondência nas outras colunas, como "aniversário" ou "sexo".

O que eu tentei até agora

Já tentei substituir todos os valores NULL por uma string vazia para evitar NULL. No entanto, a pesquisa par difusa deve corresponder a pelo menos 1 por cento, e 1% não pode ser alcançado se você tentar comparar algo com uma string vazia, pois é 0%.

Lenda:

  • Alemão/Inglês: Vorname = primeiro_nome, Nachname = nome, Geburtsdatum = aniversário, Geschlecht = sexo
  • Pesquisa: lado 1: [1], lado 2: [2]
  • Lado primário: [0] (desejo combinar as duas colunas de pesquisa com a mesma coluna primária duas vezes para copiar a coluna Nachname_Vergleich para uma segunda coluna Nachname_Vergleich2 e fazer o mesmo com a coluna Vorname)

insira a descrição da imagem aqui

A caixa de seleção "Tratar String Vazia como NULL" trava a Pesquisa Premium em qualquer entrada

Também tentei contornar isso definindo essas strings vazias ''como NULL novamente pela própria ferramenta, mas essa configuração trava a pesquisa de qualquer entrada, seja NULL ou não, testada também durante algumas outras tarefas. Portanto, há um bug ou não entendo a configuração, mas pego essa caixa de seleção:

Configurações avançadas de comparação - v22.1 (22.1.0.30606) -> "Tratar string vazia como NULL"

insira a descrição da imagem aqui

Sempre que você o executa com uma caixa de seleção marcada, ele falha com três erros:

[Premium_Lookup_trying_to_match_NULLs [74]] Erro: Ocorreu um erro com a seguinte mensagem de erro: "System.NullReferenceException: referência de objeto não definida para uma instância de um objeto. (SSIS Productivity Pack, v22.1.0.30606 - DtsDebugHost, v13.0.4495. 10)".

[Premium_Lookup_trying_to_match_NULLs [74]] Erro: Premium_Lookup_trying_to_match_NULLs não conseguiu processar os dados.

[SSIS.Pipeline] Erro: Código de erro SSIS DTS_E_PROCESSINPUTFAILED. O método ProcessInput no componente "Premium_Lookup_trying_to_match_NULLs" (74) falhou com o código de erro 0xC02090F9 ao processar a entrada "Lookup Table Input" (79). O componente identificado retornou um erro do método ProcessInput. O erro é específico do componente, mas é fatal e fará com que a tarefa Data Flow pare de ser executada. Pode haver mensagens de erro postadas antes disso com mais informações sobre a falha.

E mesmo que funcionasse, não ajudaria, pois apenas substituiria as strings vazias por um NULL, o que provavelmente passaria as linhas para a saída sem correspondência novamente como era no início, para que nada fosse ganho com a substituição de NULL:s com strings vazias no início.

Gambiarra

Portanto, não obtenho nenhuma correspondência da ferramenta "Pesquisa Premium" enquanto a pesquisa funciona assim que defino a correspondência das duas colunas como "ignorar".

Minha solução alternativa é substituir o lado 1 pelo lado 2 se o lado 1 for NULL e, em seguida, ele for executado como deveria, mas isso também diminui uma chance de correspondência se ambos os lados estiverem preenchidos, e eu quero obter as duas pontuações correspondentes se as duas colunas estão preenchidas.

Portanto, a solução alternativa é apenas a segunda melhor maneira, já que desejo que a pesquisa simplesmente ignore NULL:s ou dê a eles 0 pontos de pontuação, já que a média dos pontos de pontuação ausentes é a média do conjunto de correspondências encontrado.

Pergunta

Para uma pesquisa que tem dois lados em relação a uma entrada primária que tem apenas um lado, quero combinar ambos os lados da pesquisa por conta própria com a entrada primária. Não quero apenas substituir o lado de pesquisa 1 pelo lado de pesquisa 2 se houver um NULL. Como posso fazer isso e ainda pular NULL:s ou dar a eles 0 pontos de pontuação em vez de perder as linhas para a saída incomparável, como parece acontecer aqui?

ssis
  • 1 respostas
  • 21 Views
Martin Hope
questionto42
Asked: 2024-04-18 07:00:00 +0800 CST

Número inteiro na casa dos 700.000 como os dias do ano 1: como isso pode ser convertido em tsql para uma data e vice-versa se a data e hora mais antiga for 1753-01-01?

  • 9

Me deparei com um formato inteiro para datas para as quais também sei a data, mas não sei como chegar a essa data no TSQL e também não sei como chegar ao número inteiro se tiver a data:

700444 -> 02/10/1918

731573 -> 24/12/2003

739479 -> 16/08/2025

Esses números de 6 dígitos serviriam como um contador para cada dia a partir de 0001-01-01, verifiquei isso obtendo o número de dias para um século a partir daquela data que é quase o ano 2000 e adicionando isso a 1900:

select DATEADD(dd,731573/20,'19000101')

Fora:

2000-02-24 00:00:00.000

Mas não consigo correr select DATEADD(dd,731573/20,'10000101'), o que gera:

A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo.

O Microsoft Learn diz que o TSQL permite datas apenas a partir de 1753-01-01, veja datetime (Transact-SQL) Microsoft Learn , assim:

select DATEADD(dd,731573/20,'17530101')

Fora:

1853-02-24 00:00:00.000

Porém, não posso adicionar 731573 ao ano 1. Então descobri Qual é o significado de 01/01/1753 no SQL Server? :

--(como dito em uma das respostas e em Por que você deve sempre escrever "varchar" com o comprimento entre colchetes atrás dele? Muitas vezes, você obtém o resultado certo sem fazer isso - DBA SE , pegue varchar(length)em vez de apenas varchar)--

SELECIONE CONVERT(VARCHAR, DATEADD(DAY,-731572,CAST('2003-12-24' AS DATETIME2)),100)

SELECT CONVERT(VARCHAR(30), DATEADD(DAY,-731572,CAST('2003-12-24' AS DATETIME2)),100)

Fora:

Jan  1 0001 12:00AM

Para que isso seja comprovado, o número são os dias a partir do primeiro dia do ano 0001. Agora me pergunto se consigo chegar lá sem formatar a coluna datetime como datetime2. Minhas datas são todas apenas nos séculos 20 e 21, então não preciso do arquivo datetime2. Recebo os dados como data e hora e tento evitar uma conversão de tipo.

Como posso converter esse número inteiro em setecentos mil como o contador dos dias do ano 1 até uma data e como posso voltar da data para esse número inteiro sem converter a data em datetime2?

sql-server
  • 3 respostas
  • 1089 Views
Martin Hope
questionto42
Asked: 2024-04-18 00:36:47 +0800 CST

Por que você deve sempre escrever “varchar” com o comprimento entre colchetes atrás dele? Freqüentemente, você obtém o resultado certo sem fazer isso

  • 4

"Muitas vezes, você obtém o resultado certo sem fazer isso."

Exemplo:

select CONVERT(varchar, getdate(), 112)

saídas

20240417

Eu vi isso em alguns lugares no Stack Exchange até encontrar um pequeno comentário que dizia ao leitor para não esquecer o comprimento entre colchetes. Afirmei que isso não é necessário se você definir o número do estilo para uma data e hora como esta. No entanto, agora tenho conhecimento suficiente para entender que "varchar nunca deve ficar sozinho", deve sempre ser escrito como algo como varchar(1234).

Quanto ao código acima, seria:

select CONVERT(varchar(8), getdate(), 112)

Se você olhar para ele, a saída é a mesma:

20240417

Um comentário abaixo foi ainda mais longe: char(8)deveria ser levado em consideração, já que

nenhum valor no estilo 112 será menor que 8 caracteres.

Por que você deve sempre escrever varchar com o comprimento entre colchetes atrás dele?

Links que levaram a esta pergunta

  • Converter data aaaa-mm-dd em número inteiro AAAAMM - DBA SE
  • SQL Server Converter Varchar em Datetime - Stack Overflow
  • Converter data em tipo de dados numérico - Stack Overflow
sql-server
  • 2 respostas
  • 147 Views
Martin Hope
questionto42
Asked: 2024-04-16 21:10:31 +0800 CST

A janela do projeto SSIS fica branca logo no início da depuração, status "Em execução", difícil de recuperar o projeto. Como posso evitar esse acidente?

  • 5

Isso ocupa o pacote SSIS com status running is not running - Stack Overflow .

A janela do projeto SSIS fica branca logo no início da depuração, status "Em execução":

insira a descrição da imagem aqui

O fechamento com o botão direito não pode ser feito:

insira a descrição da imagem aqui

E se eu passar o mouse sobre o ícone da barra de tarefas, esperar a visualização aparecer e clicar com o botão direito no X da janela travada, posso ver o projeto novamente na janela antiga para poder fechar a outra janela, já que faço isso não preciso mais disso:

insira a descrição da imagem aqui

E você pode ver que a depuração foi concluída, tudo verde:

insira a descrição da imagem aqui

E toda a corrida durou apenas 3 segundos, embora eu tenha esperado alguns minutos para que a janela branca desaparecesse:

insira a descrição da imagem aqui

E a execução é perfeita, sem avisos ou erros no Progresso/Resultados da Execução.

Isso acontece em cada depuração. Como posso me livrar dessa janela de projeto esbranquiçada do Visual Studio logo no início da execução de um contêiner?

PS: Provavelmente não está vinculado porque me deparo com isso com muita frequência, mas quem sabe: ao mesmo tempo, também não consigo alterar o tamanho de nenhuma caixa no Fluxo de Controle ou no Fluxo de Dados. O cursor do mouse às vezes permanece como uma seta dupla depois de tentar redimensionar algo e, mesmo que seja uma seta dupla estranha, posso clicar duas vezes nas caixas ou clicar para renomear as coisas.

sql-server
  • 1 respostas
  • 20 Views
Martin Hope
questionto42
Asked: 2024-04-08 17:42:57 +0800 CST

O depurador pára apenas nos pontos de interrupção do primeiro componente de script. Como depuro mais de um componente de script em uma tarefa de fluxo de dados do SSIS?

  • 5

Isso aborda Como depurar um componente de script no SSIS que foi solicitado para a versão 2008 e agora está desatualizado. É por isso que esta questão precisa ser reavivada para as versões de hoje.

Coloquei um ponto de interrupção em dois componentes de script em uma tarefa de fluxo de dados do SSIS. Apenas o primeiro componente de script é depurado, assim que chego ao segundo, o script é executado até o fim sem parar em nenhum ponto de interrupção.

Como posso depurar o segundo componente de script para que o depurador pare nos pontos de interrupção?

sql-server
  • 1 respostas
  • 11 Views
Martin Hope
questionto42
Asked: 2024-04-08 01:30:57 +0800 CST

O DFT descarta a conexão e sua tabela temporária após deixar qualquer item DFT, testado com dois componentes de script. Como mantenho a tabela temporária ativa?

  • 5

Ligações

Isso ocupa:

  • O uso de tabelas temporárias no fluxo SSIS falha - Stack Overflow

  • É possível usar uma tabela temporária em uma fonte de fluxo de dados? ; a resposta é:

    'Não', pois não pode ser aprovado sem ser descartado imediatamente.

    (Lembre-se de que mesmo a resposta funcional abaixo não pode resolver esse problema do item Fonte de Dados que não lhe dá a opção de fechar ou liberar a conexão, sempre fecha a conexão e, com isso, a tabela temporária é descartada. )

  • Perco minhas tabelas temporárias ao alterar tarefas em um pacote SSIS? - Estouro de pilha

  • Como o SSIS gerencia o fechamento de conexões? Posso forçar? - Estouro de pilha

  • É possível usar OleDbConnections com o componente Script?

A partir disso, pensei em testar como manter a conexão entre dois itens DFT para que a tabela temporária não fosse descartada.

O gerenciador de conexões Control Flow não corrige isso

Com um gerenciador de conexões para o banco de dados "tempdb", posso criar tabelas temporárias no Fluxo de Controle que sobrevivem à próxima etapa dentro do Fluxo de Controle, consulte Usar Tabela Temp no SSIS? . Embora você possa pensar que como criar uma tabela temporária na tarefa de fluxo de controle do SSIS e depois usá-la na tarefa de fluxo de dados? já responde a esta pergunta, descobri que a resposta não resolve o problema de tabelas temporárias descartadas após uma etapa no DFT.

O gerenciador de conexões ADO.NET não corrige isso

Testei o DFT com um gerenciador de conexões ADO.NET e a tabela temporária ainda foi descartada após o componente Script.

insira a descrição da imagem aqui

Configuração de teste

Testei em um Script Component que coloquei depois do outro:

insira a descrição da imagem aqui

Definir RetainSameConnectioncomo Truenão resolve

Eu configurei RetainSameConnectioncomo Truenos outros links, mas isso não resolveu.

Truques de código

Tentei não fazer uma nova conexão no segundo Componente Script, mas apenas adquiri-lo, sem sucesso:

  • No componente de script 1, ambos base.PostExecute();e conn.Close();são comentados, o código é retirado de Como criar e preencher uma tabela temporária com dados recebidos de um item de fonte de dados sem sair do componente de script C# da tarefa de fluxo de dados do SSIS? :
    public override void PostExecute()
    {
        //base.PostExecute();
        // here we would bulk copy data into the temp table
        // you may need to batch this operation or handle it differently based on your situation
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
        {
            // Now write that DataTable to the database 
            bulkCopy.DestinationTableName = "##tmpTable";
            bulkCopy.WriteToServer(dt);
            bulkCopy.Close();
        }
        //conn.Close();
    }
  • No Script Component 2, a mesma conexão é buscada novamente com (SqlConnection)Connections.Connection.AcquireConnection(Transaction);:
    public override void AcquireConnections(object Transaction)
    {
        base.AcquireConnections(Transaction);
        conn = (SqlConnection)Connections.Connection.AcquireConnection(Transaction);
    }

A tabela temporária é descartada já após o término do primeiro componente de script, pois a conexão parece ter sido perdida por padrão, mesmo que eu não a feche.

Busca por um truque que me permita trabalhar com tabelas temporárias em muitos itens DFT e em todo o pacote/projeto

Espero encontrar uma resposta que mantenha viva a tabela temporária com algum tipo de truque. Tudo deve funcionar apenas no SSIS, não posso simplesmente criar a tabela temporária no SSMS apenas para mantê-la ativa para o SSIS.

Se o DFT eliminar tabelas temporárias após deixar qualquer item DFT, como posso manter a tabela temporária ativa no gerenciador de conexões em funcionamento ou qual é a solução alternativa para isso?

sql-server
  • 2 respostas
  • 18 Views
Martin Hope
questionto42
Asked: 2024-03-28 07:10:05 +0800 CST

Como faço para criar e preencher uma tabela temporária de uma fonte de dados por meio de um DataTable C# sem nunca sair da tarefa de fluxo de dados do SSIS?

  • 5

Vim fazer esta pergunta depois de codificar em um componente de script por algum tempo, testando principalmente como fazer um loop nas colunas do Rowobjeto, consulte Looping Through Columns in SSIS Script Component - Stack Overflow e a observação abaixo dele que me pede para abrir um nova pergunta. Também verifiquei minuciosamente a pergunta ainda mais antiga sobre a mesma coisa em Aplicar transformação de linha para múltiplas colunas de entrada em Transformação de script para descobrir como percorrer as colunas. Esta não é, portanto, a questão aqui.

Migro alguns trabalhos do SQL Agent para o SSIS. Os trabalhos do Agente executam SQL e têm muitos select:s ou CTE:s aninhados. Meu objetivo é pegar cada código SQL fornecido e dividi-lo por cada nível de consulta aninhado, para que cada nível chame a atenção à primeira vista ao observar a tarefa de fluxo de dados do SSIS. Passo a passo é melhor do que observar grandes consultas SQL aninhadas.

Não sou o primeiro a fazer perguntas sobre como permanecer dentro do DFT e alterar a fonte de dados, consulte SSIS data flow to update source table rows after copying to destination , embora essa pergunta seja sobre como alterar a própria tabela de origem, enquanto esta pergunta é sobre como colocar alterações no topo da tabela de origem e tornando-a a nova saída dentro do DFT.

Veja este padrão:

select abc.*, abc.column1 + abc.column2 as column3 from (select * from xyz) abc

Ou com um CTE:

with abc as (
select * from xyz
)
select abc.*, abc.column1 + abc.column2 as column3 from abc

Os dois são iguais, e tento dividi-los em duas etapas na Tarefa de Fluxo de Dados (DFT), uma após a outra, para que haja, na melhor das hipóteses, apenas um nível de consulta SQL para cada nível de consulta aninhada:

Fonte OLE DB "DataSourceAbc":

select * from xyz

Componente de script:

create ##tmpDataSourceAbc as (...);
select abc.*, abc.column1 + abc.column2 as column3 from ##tmpDataSourceAbc;

Muitas vezes, trata-se apenas de adicionar algumas colunas ou alterar um pouco as colunas, ou fazer uma pesquisa ou algo semelhante, e para isso, o SSIS ou terceiros fornecem ferramentas como Coluna Derivada ou componentes de Pesquisa. Mas quero evitar reescrever o código SQL que tenho em mãos na linguagem SSIS com seu próprio tipo de dados. Chame-me de preguiçoso ou com medo, mas gostaria de assumir o código SQL como está, em vez de torná-lo um código SSIS.

Além do mais, eu gostaria de usar as ferramentas integradas que permitem SQL e evitar componentes de script sempre que possível, é por isso que uso a "OLE DB Source" no início para buscar dados com SQL do servidor em vez de apenas selecionando em uma tabela temporária dentro do componente de script. E como quero trabalhar mais na saída dessa selectconsulta, preciso de um componente de script após a "Fonte OLE DB" com suas setas de saída para que ele possa passar todas as colunas posteriormente. Para deixar isso claro, se eu deixasse o fluxo de dados para um destino, o fluxo de dados pararia, pois não possui setas de saída e eu teria que adicionar as colunas após passar para a próxima etapa do Fluxo de Controle, e não o faço. quero isso. Quero ficar dentro do DFT o tempo todo, pois a consulta do SQL Agent também é apenas uma tarefa de fluxo de dados.

Portanto, o plano é criar um componente de script que pegue os dados de uma fonte OLE DB (por exemplo), depois crie uma tabela temporária e preencha essa tabela temporária com a fonte de dados. Depois, adiciona uma nova coluna ou altera algo em cima da tabela temporária, e por se tratar de uma tabela temporária, a nova coluna pode ser feita com mero SQL dentro da mesma DFT.

O que eu sei, mas ainda não quero fazer:

  • Eu sei como selecionar dados em uma tabela temporária com SQL em C#, consulte Selecionar na explicação/tabelas temporárias . Mas isso significaria ter um SQL que preenche a tabela temporária enquanto eu quero preenchê-la com os dados importados que obtive de um componente que está upstream no fluxo de dados.

  • Também sei que posso criar a tabela temporária no fluxo de controle, consulte Como criar uma tabela temporária na tarefa de fluxo de controle do SSIS e depois usá-la na tarefa de fluxo de dados? . No entanto, quero que a tabela temporária seja criada em execução no DFT exatamente quando eu precisar, como uma consulta aninhada ou CTE que é substituída por uma consulta de tabela temporária. Então, o pacote fica mais legível se eu supervisionar todo o fluxo de dados no DFT sem voltar ao Fluxo de Controle.

Assim, o plano é:

  • Um DataTable armazena os dados das linhas de entrada com todas as suas colunas originais.
  • No método PreExecute, crie colunas dinamicamente no DataTable com base nas colunas de entrada.
  • No método Input0_ProcessInputRow, preencha o DataTable com cada linha de entrada.
  • No método PostExecute, insira todas as linhas do DataTable na tabela temporária.
  • Adicione uma coluna.

Tudo isso seria um componente de script que adiciona uma coluna à fonte de dados.

Mas tenho dificuldade em mapear as colunas do objeto Row com as colunas DataTable. Assim, a questão:

Alguém descobriu como as colunas do objeto Row podem ser mapeadas para um DataTable que eu uso para preencher a tabela temporária? Algo como:

DataTable dt = new DataTable();
DataRow dr = dt.NewRow(); 

...       

foreach (var c in columns){
             dr[c] = c;
         }
         dt.Rows.Add(dr);

Recebo este código: "A coluna 'myCol' não pertence à tabela." Assim, o cwhich era o nome da coluna do Rowobjeto, não foi encontrado no DataRowobjeto drdo DateTableobjeto dt.

As colunas do objeto Row nem sempre correspondem ao nome da coluna do DataTable. Como faço para colar todas as colunas do Rowobjeto no DataTable para cada linha para que no final eu possa copiar os dados completos do DataTable para a tabela temporária?

sql-server
  • 2 respostas
  • 26 Views
Martin Hope
questionto42
Asked: 2024-03-06 07:45:17 +0800 CST

odbc--chamada falhou. [Microsoft][ODBC SQL Server Driver][SQL Server]Um conflito de ordenação... no operador UNION ALL... não pode ser resolvido. (#451)

  • 5

I union allas colunas distintas das INFORMATION_SCHEMA.COLUMNSvisualizações de muitos bancos de dados que consulto com uma consulta direta:

insira a descrição da imagem aqui

select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from xyz
UNION ALL 
select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from bar
UNION ALL 
select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from foo

Meu objetivo é fazer um mapeamento rápido entre colunas antigas e novas e quaisquer outras colunas que tenham o mesmo nome, ou verificar colunas órfãs e duplicadas. Tendo o distinto TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAMEde tudo em mãos e unindo-o ao column_name consigo mesmo, obtenho um mapeamento completo de cada coluna para qualquer outra entidade que você possa encontrar.

Tudo funciona bem até que eu também tenha union alluma tabela que não seja uma INFORMATION_SCHEMA.COLUMNSvisualização, mas uma mera tabela com seu próprio agrupamento na coluna que possui os column_names não dinâmicos nas linhas da field_namecoluna. Por isso preciso fazer as mesmas colunas manualmente, como se fosse uma INFORMATION_SCHEMA.COLUMNSview:

SELECT DISTINCT 'abc' AS TABLE_CATALOG, 'dbo' AS TABLE_SCHEMA, 'xyz' AS TABLE_NAME, [xyz].field_name AS COLUMN_NAME
FROM xyz
ORDER BY [xyz].field_name;

Como a consulta reúne a saída de muitos catálogos de bancos de dados, não posso apenas codificar em TSQL no SSMS, mas preciso fazer consultas externas de vários bancos de dados e union alla saída juntos. Eu utilizo o MS Access para isso, mas você também pode atingir esse objetivo com um aplicativo de console em C# no Visual Studio.

E como eu tenho essa consulta (visualização "xyz") que preciso construir manualmente, e como sua coluna field_name tem outro agrupamento além da COLUMN_NAMEcoluna da INFORMATION_SCHEMA.COLUMNSvisualização, o seguinte erro é gerado:

Mensagem de erro em alemão:

insira a descrição da imagem aqui

odbc--chamada falhou. [Microsoft][ODBC SQL Server Driver][SQL Server]Um conflito de classificação entre "SQL_Latin1_General_CP1_CI_AS" e "Latin1_General_CI_AS" no operador UNION ALL, no qual o 4-spalte da resposta SELECT foi adicionado, não pode ser usado. (#451)

Coloque em inglês com deepl:

odbc--chamada falhou. [Microsoft][ODBC SQL Server Driver][SQL Server]Um conflito de agrupamento entre "SQL_Latin1_General_CP1_CI_AS" e "Latin1_General_CI_AS" no operador UNION ALL que ocorre na coluna 4 da instrução SELECT não pode ser resolvido. (#451)

Em seguida, tentei com o agrupamento necessário, consulte Como obtenho algo como a visualização de metadados INFORMATION_SCHEMA.COLUMNS da própria visualização INFORMATION_SCHEMA.COLUMNS? , mas com Latin1_General_CI_ASmeu agrupamento padrão do banco de dados e, portanto, com o agrupamento correto, este erro é gerado:

insira a descrição da imagem aqui

A instrução SELECT inclui uma palavra reservada ou um nome de argumento com erros ortográficos ou ausentes, ou a pontuação está incorreta.

Tentei alterar os agrupamentos de outras maneiras antes e depois disso, e parece que o MS Acces não permite alterar o agrupamento em um SELECTcomando.

Como posso me livrar desse erro?

sql-server
  • 1 respostas
  • 30 Views
Martin Hope
questionto42standswithUkraine
Asked: 2022-03-12 16:00:03 +0800 CST

Na consulta MySQL, VARCHAR(100) obtém a saída como "[número da peça]", embora em uma consulta com mais colunas, ainda é mostrado como 'p-12345'

  • -1

Essa é uma pergunta ruim, pois só errei ao selecionar por acaso um cliente que tinha dados ruins e deve ter alterado a condição where durante os testes, e também foi um problema de uma junção que nem mencionei na pergunta que levou a tantas [partnumber]entradas estranhas que a consulta limite 10 mostrou apenas essas. Então pensei que a coluna inteira teria esse valor. Não tenho certeza se devo excluí-lo. Também pode ajudar alguém que tenha dados de lixo sem saber disso. Você pode votar para encerrar a pergunta se achar que isso desperdiçou seu tempo. Pois vejo a mim mesmo que isso pode ser uma perda de tempo lendo.

Em uma consulta normal SELECT p.* FROM tablecom muitas colunas, a saída mostra valores em uma coluna necessária, cada número aparece, mostrando apenas a coluna com o partnumber (um número parcialmente numérico como p-12345):

insira a descrição da imagem aqui

Mas quando peço apenas essa coluna sozinha com SELECT client_x FROM table, recebo:

insira a descrição da imagem aqui

ATUALIZAR:

Eu posso ver os valores dessa coluna agora!! Eles não estão mais aparecendo [partnumber]em cada linha, mas, em vez disso, há números e strings e valores vazios também.

insira a descrição da imagem aqui

Eu tinha a condição where no cliente nele, e o valor nesse cliente é sempre [partnumber]. É lixo apenas nesse cliente.

ATUALIZAR fim

O tipo de dados da coluna é varchar(100). Deve ser tratado como uma string normal.

insira a descrição da imagem aqui

Eu uso o DBeaver, mas isso não deve desempenhar um papel.

Se eu concatenar a coluna com alguma string, o valor aparece como uma string vazia:

SELECT CONCAT("test", client_x) FROM table

retorna apenas "teste" como valores.

Como posso evitar essa [partnumber]saída na saída da coluna e mostrar a string do número da peça, como é mostrado quando eu apenas executo SELECT * FROM table?

mysql mysql-5.5
  • 1 respostas
  • 47 Views
Martin Hope
questionto42standswithUkraine
Asked: 2020-07-21 01:57:06 +0800 CST

Como representar a chave estrangeira em um modelo ER estendido na notação Chen?

  • 1

Este é um spin-off da pergunta em Como representar uma chave estrangeira em um diagrama ER? o que é muito vago sobre a notação necessária.

Lá, a ideia de sublinhar FKs com uma linha pontilhada é afirmada. Eu também me lembro disso de um exame. Não tenho certeza, porém, poderia ter sido um duplo sublinhado também, esta questão não é determinada para a linha pontilhada. Pesquisei um pouco, descobrindo que uma linha pontilhada representa um atributo de chave fraca.

insira a descrição da imagem aqui

Fonte: https://conceptdraw.com/a977c4/p1/preview/640/pict--chen's-erd-design-elements---er-diagram-(chen-notation).png--diagram-flowchart-example. png

Posso usar um determinado formato para mostrar FKs em um EERM Extended Entity-Relationship Model em notação Chen?

database-design foreign-key
  • 1 respostas
  • 7735 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve