Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如何在批量插入期间修改.csv中的数据?_Sql Server_Csv_Bulkinsert - Fatal编程技术网

Sql server 如何在批量插入期间修改.csv中的数据?

Sql server 如何在批量插入期间修改.csv中的数据?,sql-server,csv,bulkinsert,Sql Server,Csv,Bulkinsert,我正在尝试将使用MySQL构建的web应用程序转换为Microsoft SQL,需要一些指导。我有各种不同的CSV数据源,我使用加载数据本地填充来修改内容,例如,将大小写更改为大写,删除空格,将多个字段合并为一个字段,等等,添加一些数据,包括帐号和当前日期/时间,忽略分配给虚拟变量的一些数据,从不使用,并将数据以正确的列放入我的数据库中。我可以使用MSSQL获得相同的结果吗 以下是MySQL版本的导入代码片段示例: LOAD DATA LOCAL INFILE 'testDataFile.csv

我正在尝试将使用MySQL构建的web应用程序转换为Microsoft SQL,需要一些指导。我有各种不同的CSV数据源,我使用加载数据本地填充来修改内容,例如,将大小写更改为大写,删除空格,将多个字段合并为一个字段,等等,添加一些数据,包括帐号和当前日期/时间,忽略分配给虚拟变量的一些数据,从不使用,并将数据以正确的列放入我的数据库中。我可以使用MSSQL获得相同的结果吗

以下是MySQL版本的导入代码片段示例:

LOAD DATA LOCAL INFILE 'testDataFile.csv'
INTO TABLE tbl_raw_data
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
@order_date,
@order_number,
@site_name,
@patient_name_last,
@patient_name_first,
@dummy,
@dummy, 
@dummy,
@medication_ndc_prefix,
@dummy,
@dummy,
@patient_ID_number,
@prescriber_ID, 
@order_retail,  
@insurance_ID,
@dummy,
@order_reimbursement,
@dummy,
@dummy,
@dummy, 
@dummy,
@dummy,
@order_acquisition_cost,    
@dummy,
@dummy,
@dummy
)
SET
order_number = UPPER(TRIM(@order_number)),
site_name = UPPER(TRIM(@site_name)),
patient_name_last = UPPER(TRIM(@patient_name_last)),
patient_name_first = UPPER(TRIM(@patient_name_first)),
patient_ID_number = UPPER(TRIM(@patient_ID_number)),
prescriber_ID = UPPER(TRIM(@prescriber_ID)),
insurance_ID = UPPER(TRIM(@insurance_ID)),
order_date = str_to_date(@order_date, '%m/%d/%Y'),
order_retail = REPLACE(@order_retail,'$',''),
order_reimbursement = REPLACE(@order_reimbursement,'$',''),
order_acquisition_cost = REPLACE(@order_acquisition_cost,'$',''),
medication_ndc_prefix = LEFT(REPLACE(@medication_ndc_prefix, '-', ''),9),
patient_ID = CONCAT(TRIM(patient_name_last),',',trim(patient_name_first),'-',patient_ID_number),
order_added_on = CURRENT_TIMESTAMP,
account_ID = 1
如果需要的话,web界面是用PHP构建的。

使用

我们的.fmt文件的示例描述了csv中的字段


您可以找到*.fmt.

的说明。您可以在MS SQL中使用导入/导出向导。这是供web使用的。我能在没有桌面应用程序的情况下完成吗?这是一篇老文章,但尽管它没有直接解释如何在大容量插入期间修改列,但我认为这是最好的答案,因为您可以在select:insert INTO dbo.YourTable select trim fa.field1,upper a.field2,-等等中指定列列表。。。从OPENROWSET BULK'D:\our.csv',FORMATFILE='D:\our.fmt'作为;
INSERT INTO dbo.YourTable
SELECT a.* FROM OPENROWSET( BULK 'D:\our.csv', FORMATFILE = 'D:\our.fmt') AS a;
9.0
4
1  SQLCHAR  0  50 ";"        1  Field1                SQL_Latin1_General_Cp437_BIN
2  SQLCHAR  0  50 ";"        2  Field2                SQL_Latin1_General_Cp437_BIN
3  SQLCHAR  0  50 ";"        3  Field3                SQL_Latin1_General_Cp437_BIN
4  SQLCHAR  0  500 "\r\n"      4  Field4        SQL_Latin1_General_Cp437_BIN