我试图将数据从excel表插入到sql数据库中。查询存储在文本文件中,如下所示:
insert into [demo].[dbo].[relative]
select *
from openrowset('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=D:\relative.xls','select * from [sheet1$]');
当我执行以下命令时:
sqlcmd -S ADMIN-PC/SEXPRESS -i d:\demo.txt.
显示此错误:
Msg 7357,Level 16,State 2,Server ADMIN-PC \ SEXPRESS,Line 1
任何人都可以帮助纠正我的问题。
答案 0 :(得分:0)
还有另一种方法可以获得相同的结果..
创建临时表。
declare @sometable table (value varchar(50), translation varchar(max))
select * into @sometable from YOUR_DATABASE_TABLE (nolock)
然后,从这里开始你的OPENROWSET,BCP等。
答案 1 :(得分:0)
尝试使用sql server import vizard从xls文件创建一个新表,然后从那里将该数据插入到现有表中。您遇到的问题可能是由于64位sql实例与32位excel之间不兼容。
或尝试使用bcp
bcp demo.dbo.relative in "D:\relative.xls" -c -T
答案 2 :(得分:0)
您可以创建一个shell脚本,该脚本将自动从.csv文件中读取插入命令,然后将其写入数据库。如果你愿意,我可以帮助你。您只需要在.csv文件中写入所有插入语句。
#!/bin/ksh
sqlplus -silent /nolog << EOF > /dev/null
username/pwd@"Connection String"
set linesize 0;
set pagesize 0;
set echo off;
while read line; do
A=`echo "$line" | awk -F" " {print 1}`
and so on depends on the number of words in the insert statements.
$A $B
done < your_insert_statements.csv
它将读取.csv文件并自动在数据库中插入记录。