Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为SQL Server批量导入指定空字段_Sql_Sql Server_Tsql - Fatal编程技术网

为SQL Server批量导入指定空字段

为SQL Server批量导入指定空字段,sql,sql-server,tsql,Sql,Sql Server,Tsql,使用SQL Server 2012,我将使用大容量插入将文本文件导入临时表: BULK INSERT #temp FROM 'filepath\mydata.txt' WITH ( FIRSTROW = 2, FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n', KEEPNULLS ) 我创建的#temp表的数据类型各不相同,包括float、nvarchar和d

使用SQL Server 2012,我将使用大容量插入将文本文件导入临时表:

BULK INSERT #temp
    FROM 'filepath\mydata.txt'
    WITH
    (
        FIRSTROW = 2,
        FIELDTERMINATOR = '\t',
        ROWTERMINATOR = '\n',
        KEEPNULLS
    )
我创建的
#temp
表的数据类型各不相同,包括float、nvarchar和datetime

我的问题是,我的数据有几种命名空值的方法,包括
DNE
N/A
NA
等。当我尝试运行上述代码时,非字符列中存在这些值会导致此类错误:

Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 393, column 1 (Id)

我想知道是否有办法在表中指定一组值(
DNE
#N/a
NA
等),以便在导入时自动将其视为空值。

是否尝试过此选项

选项1: 您应该使用C#代码或任何语言代码清理数据输入,并在大容量插入之前将数据清理干净

选项2: 在大容量插入选项中有约束,可以使用这些约束检查数据并根据表要求修改,然后可以将修改后的数据导入大容量插入操作

导入使用科学记数法的数值的示例 此示例使用下表:

CREATE TABLE t_float(c1 float, c2 decimal (5,4));  
用户希望将数据批量导入t_浮点表。数据文件

C:\t\u float-C.dat
,包含科学符号float数据。例如:

 8.0000000000000002E-28.0000000000000002E-2  
但是,大容量插入无法将此数据直接导入t_float,因为其第二列c2使用decimal数据类型。因此,需要一个格式化文件。格式文件必须将科学符号浮点数据映射到c2列的十进制格式。 以下格式文件使用SQLFLT8数据类型将第二个数据字段映射到第二列: 要使用此格式文件(使用文件名C:\t\u floatformat-C-xml.xml)将测试数据导入测试表,请发出以下Transact-SQL命令

声明:

 BULK INSERT bulktest..t_float  
FROM 'C:\t_float-c.dat' WITH (FORMATFILE='C:\t_floatformat-c-xml.xml');  
GO  
选项3:
您可以将值设置为nVarchar并导入到表中,然后再次使用游标遍历表,然后转换值[这不是优化的方式,可能需要一些时间,但在某些情况下,基于数据,这也会有所帮助]

在更改数据类型之前,您必须先清理字段。一种方法似乎是使用格式文件。然后可以将everything指定为varchar/nvarchar导入,然后创建代码将这些值更新为null,然后转换为所需的数据类型。