Erros do dia-a-dia (Bulk Insert com delimitador) – Caso 5

Neste artigo estarei tirando a dúvida de nos enviaram sobre Bulk Insert. Então vamos a especificação da dúvida:
Pessoal criei a seguinte estrutura:

CREATE TABLE PRODUTOS
(
    IDPRODUTO INT IDENTITY PRIMARY KEY NOT NULL,
    SDSCPRODUTO VARCHAR(100),
    NPRECO NUMERIC(10,2)
)
go

Agora eu tenho um arquivo chamado produtos.txt, e queria fazer um BULK INSERT, que inserisse somente nas colunas SDSCPRODUTO e NPRECO, uma vez que o IDPRODUTO é identity e eu não preciso inserir nada nele.
Eu fiz assim

BULK INSERT produtos
FROM 'C:\PRODUTOS.txt'
WITH
(
        FIELDTERMINATOR = ';',
        ROWTERMINATOR = '\n'
)

Porém como eu especifico para que insira somente nos campos SDSCPRODUTO e NPRECO?
Resposta: Neste caso teria que ser criada uma tabela, view ou temporária, e depois realizar o insert na tabela.
Vejamos como ficou a solução:

USE GUIADBA
GO
IF OBJECT_ID('PRODUTOS')IS NOT NULL
DROP TABLE PRODUTOS
GO
CREATE TABLE PRODUTOS
(
    IDPRODUTO INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
    SDSCPRODUTO VARCHAR(100),
    NPRECO NUMERIC(10,2)
)
GO
IF OBJECT_ID('TEMPDB..#PRODUTOS')IS NOT NULL
DROP TABLE #PRODUTOS
GO
CREATE TABLE #PRODUTOS (SDSCPRODUTO VARCHAR(20), NPRECO NUMERIC(10,2))
GO
   BULK INSERT #PRODUTOS
   FROM 'C:\SISTEMAP1\PRODUTOS.TXT'
   WITH (FIELDTERMINATOR = ',');
GO
INSERT INTO PRODUTOS (SDSCPRODUTO, NPRECO)
SELECT * FROM #PRODUTOS
GO

Resultado:
bulkinsert

1 Comentário

Adicionar comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *