Pergunta

Eu quero importar um arquivo de texto de uma coluna em uma das minhas tabelas sql. O arquivo é apenas uma lista de palavrões.

Eu escrevi o seguinte TSQL para fazer isso

BULK INSERT SwearWords
FROM 'c:\swears.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

No entanto, os erros com final unexapected de arquivo. O im mesa de importação para é apenas um campo de identidade seguido por um campo nvarchar que deseja inserir o texto. Ele funciona muito bem se eu adicionar no arquivo de texto "1", para o início da eveyr linha, eu assumo isso é porque SQL se à procura de 2 campos. Existe alguma maneira de contornar isso?

Graças

Foi útil?

Solução

Você precisa usar FORMATFILE para isso. Consulte BULK INSERT .

FORMATFILE [= 'format_file_path']

Especifica o caminho completo de um formato Arquivo. Um arquivo de formato descreve os dados arquivo que contém respostas armazenados criado utilizando o utilitário BCP sobre o mesma tabela ou vista. O arquivo de formato deve ser utilizado nos casos em que:

* The data file contains greater or fewer columns than the table or view.

* The columns are in a different order.

* The column delimiters vary.

* There are other changes in the data format. Format files are usually created by using the bcp utility and modified with a text editor as needed. For more information, see bcp Utility.

Para obter informações mais detalhadas, consulte Usando Format arquivos .

Outras dicas

Isto é descrito em livros na linha para INSERT BULK sob o argumento de KEEPIDENTITY. Aqui está o que diz

KEEPIDENTITY Especifica que os valores para uma coluna de identidade estão presentes no arquivo importado. Se KEEPIDENTITY não é dado, os valores de identidade para esta coluna no arquivo de dados importados são ignorados, e SQL Server atribui automaticamente valores exclusivos com base nos valores de semente e de incremento especificados durante a criação da tabela. Se o arquivo de dados não contém valores para a coluna de identidade na tabela ou exibição, use um arquivo de formato para especificar que a coluna de identidade na tabela ou exibição deve ser ignorada durante a importação de dados; SQL Server atribui automaticamente valores exclusivos para a coluna

Então, use um arquivo de formato ou fornecer um valor fictício e certifique-se de não usar o argumento KEEPIDENTITY

Além disso, você pode criar um ponto de vista sobre a sua mesa baseado apenas na coluna nvarchar, e depois BULK INSERT em sua vista. Esta é uma maneira muito limpo de utilizar BULK INSERT.

Desta forma, você não precisa se preocupar com sua coluna de identidade, ou a criação de um arquivo de formato.

Sua declaração BULK INSERT deve ficar assim:

BULK INSERT vw_SwearWords FROM 'c:\swearwords.txt' WITH (ROWTERMINATOR = '\n')

Você precisa ter certeza de que a estrutura do seu arquivo de texto eo jogo de mesa - se a tabela tem dois campos, então você terá que fornecer dois campos / colunas no arquivo de texto, bem

.

Desde a primeira coluna na tabela de SQL é um campo de identidade, você pode fornecer qualquer valor que você quer -., Mas você tem que ter um valor lá, eu não acho que há alguma maneira de contornar isso

Marc

Verifique a última linha tem CR LF (\ r \ n) /. isso é, por vezes, o problema, algumas outras vezes um retorno de carro extra é no final do arquivo. Você pode verificar isso com um editor hexadecimal.

Você pode remover a coluna de identidade e colocá-lo de volta quando você está feito. Alternativamente, se que as quebras de seus relacionamentos de banco de dados, você poderia fazer a importação usando DTS ou SSIS se é uma vez fora de importação - um controlo mais granular de mexer com colunas

No SQL Server 2008 eu achei mais fácil simplesmente criar um arquivo contendo uma grande quantidade de inserções como assim, e colar isso em janela de consulta do Management Studio, em vez de lutar com a obtenção do arquivo de formato e volume inserção permissões de arquivo apenas para a direita :

USE YourDB
GO
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)

http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row -constructor /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top