我的本地计算机上有一个tsv文件,需要将值加载到SQL表中。我可以编写一个执行此操作的SQL脚本吗?或者我是否必须制作SSIS包或使用类似的工具?
答案 0 :(得分:5)
很少解决方案:
SQL Server Management Studio>选择目标数据库节点>打开上下文菜单>任务>导入数据......
SQL Server Integration Services> Flat File Source
T-SQL语句BULK INSERT
与\t
COLUMNTERMINATOR
OPENROWSET(BULK 'file path')
带有-t
参数的 bcp工具(默认值\t
)
TextFieldParser课程(Delimiters
属)和{SqlBulkCopy班级或SqlCommand班级
其他解决方案。
注意:对于3)和4)源文件需要由SQL Server实例访问(通常,这意味着源文件必须与SQL Server在同一台机器上)
答案 1 :(得分:1)
@Bogdan Sahlean给出了非常详尽的答复。
但是,我们都知道在SQL Server中导入任何文件都不容易,并且在首次尝试时总是会失败。
如果您在导入.tsv
时像我一样 生气 ,而这些nvarchar(MAX)
的重量却很少,例如this one,那么我为您提供了一个快速的解决方案。 / p>
在SSMS 2017中,您可以执行以下操作:右键单击数据库>任务>导入平面文件...,然后为所有数据类型设置Allow Nulls
,并为所有行打Exception of type 'System.OutOfMemoryException' was thrown. (mscorlib)
:
通过这种方式,您将导入数据错误的方式,但至少已将其导入。
您现在可以清理它们。
编辑:如果您遇到USE ip2location;
GO
DROP TABLE OpenStreetMap;
CREATE TABLE OpenStreetMap
(
name nvarchar(MAX) NULL,
alternative_names nvarchar(MAX) NULL,
osm_type nvarchar(MAX) NULL,
osm_id nvarchar(MAX) NULL,
class nvarchar(MAX) NULL,
type nvarchar(MAX) NULL,
lon nvarchar(MAX) NULL,
lan nvarchar(MAX) NULL,
place_rank nvarchar(MAX) NULL,
importance nvarchar(MAX) NULL,
street nvarchar(MAX) NULL,
city nvarchar(MAX) NULL,
county nvarchar(MAX) NULL,
state nvarchar(MAX) NULL,
country nvarchar(MAX) NULL,
display_name nvarchar(MAX) NULL,
west nvarchar(MAX) NULL,
south nvarchar(MAX) NULL,
east nvarchar(MAX) NULL,
north nvarchar(MAX) NULL,
wikidata nvarchar(MAX) NULL,
wikipedia nvarchar(MAX) NULL,
housenumbers nvarchar(MAX) NULL,
);
GO
,则可以创建表格:
BULK INSERT OpenStreetMap
FROM 'C:\Users\franc\Desktop\planet-latest_geonames.tsv\planet-latest_geonames-sorted.tsv'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = '\t',
KEEPNULLS
);
然后使用BULK INSERT导入:
SQLCMD
编辑,编辑:如果由于表太大而再次失败,您可以:
bcp ip2location.dbo.OpenStreetMap在C:\ Users \ franc \ Desktop \ planet-latest_geonames.tsv \ planet-latest_geonames-sorted.tsv -S localhost -U sqlninja -P sqlninja -c -r / r
编辑,编辑,编辑:
仍然失败?让我们尝试BULK INSERT
:
Target.sql
查询保存在名为int buttonId = -1;
protected void onCreate(Bundle b){
//set the layout related stuff first
Bundle b = getIntent().getExtras();
if(b!= null && (b.getInt(NEW_BUTTON_KEY, -1)!=-1)){
buttonPanel = (LinearLayout)findViewById(R.id.LinearButtonPanel);
for(int i = 0; i< b.getInt(NEW_BUTTON_KEY, -1); i++)
Button newButton = new Button(this);
newButton.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
newButton.setId(i);
newButton.setText("Button " + i);
buttonPanel.addView(newButton);
}
}
的文件中,然后执行以下操作:sqlcmd -S localhost -d ip2location -U sqlninja -P sqlninja -i Target.sql -o Errors.txt