Vla*_*mir 8 sql-server import sql-server-2012 integer
我正在使用导入向导加载文本文件,并且需要整数字段中的空白为空,但只插入零。
如何正确导入?
不幸的是,如果您坚持使用向导,这是不可能的,您需要使用 Visual Studio 编辑包。
在 Visual Studio 中编辑包时有一个选项“保持为空”
鉴于此 .csv 文件:
StringField,IntField
a,1
b,5
c,
d,6
e,
f,8
g,
h,
i,10
j,
Run Code Online (Sandbox Code Playgroud)
和这个表定义
CREATE TABLE [dbo].[NullTest](
[StringField] [varchar](50) NULL,
[IntField] [int] NULL
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
使用向导导入数据时,空值将转换为 0
但是,如果在向导结束时您选择“将包另存为”而不是像此屏幕中的“立即运行”
该文件可以保存在文件系统的某处。
如果您随后创建了一个新的 Integration Services 项目,您可以像这样添加一个现有的包
如果您浏览到刚刚保存的文件并查看它,您将看到一个数据流任务(如果您选择创建表而不是附加到现有表,您也会看到一个执行 SQL 任务)
双击数据流进行编辑,双击数据源勾选“保留空值”选项
然后双击目标以查看属性,然后将“保留空值”属性更改为 true。
如果您然后单击工具栏中的绿色箭头或从菜单中选择调试 > 开始调试以执行您的包,最终结果是这样的
说到底,巫师只是一个巫师。它为您生成一个 SSIS 包并选择一些默认值,不幸的是不是您想要的默认值。
如果您想保留空值,除了使用 Visual Studio 编辑包外,别无他法。
再说一次,在 Visual Studio 中自己创建包或使用@MaxVernon 的 T-SQL 解决方案可能更容易。
我看到您正在尝试使用向导导入数据。您最好使用所需的列定义手动创建表,并使用 T-SQLBULK INSERT命令导入数据。
USE tempdb;
CREATE TABLE dbo.TestSource
(
SomeNumber INT NULL
);
Run Code Online (Sandbox Code Playgroud)
我创建了一个名为的纯文本示例文件C:\temp\test.txt,其中包含以下行:
1
3
4
6
7
9
Run Code Online (Sandbox Code Playgroud)
此语句将文本文件中的行导入TestSource表中:
BULK INSERT dbo.TestSource
FROM 'C:\temp\test.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
KEEPNULLS
);
Run Code Online (Sandbox Code Playgroud)
导入完成后的内容如下:
SELECT *
FROM dbo.TestSource;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13160 次 |
| 最近记录: |