Inserção em massa usando procedimentos armazenados: solução de problemas
Em uma tentativa de inserir dados em massa usando um procedimento armazenado, um desenvolvedor encontrou erros de sintaxe. O objetivo era replicar uma consulta BULK INSERT funcional em um procedimento. Aqui está uma análise do problema e sua resolução.
O problema surge ao tentar passar um nome de arquivo como uma variável para o comando BULK INSERT dentro do procedimento armazenado. Infelizmente, esta é uma operação não suportada por BULK INSERT.
Aqui está um exemplo de uma tentativa malsucedida usando uma variável:
DECLARE @filename VARCHAR(255) SET @filename = 'e:\5-digit Commercial.csv' BULK INSERT ZIPCodes FROM @filename WITH
Em vez disso, o comando BULK INSERT espera um caminho de arquivo embutido em código. Para contornar essa limitação, considere construir a instrução BULK INSERT como uma string com um nome de arquivo fixo e executá-la como SQL dinâmico.
DECLARE @filepath NVARCHAR(500) SET @filepath = N'e:\5-digit Commercial.csv' DECLARE @bulkinsert NVARCHAR(2000) SET @bulkinsert = N'BULK INSERT ZIPCodes FROM ''' @filepath N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')' EXEC sp_executesql @bulkinsert
Ao usar SQL dinâmico, a instrução construída pode ser executada, resolvendo os erros de sintaxe encontrados na implementação do procedimento armazenado original.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3