SQLCMD 实用程序将拒绝的行生成到平面文件
SQLCMD utility generate rejected rows to flat file
目前我正在使用 SQLCMD 实用程序将 CSV 数据加载到 SQL 服务器。下面是我在命令提示符下执行的加载数据的命令:
sqlcmd -Usa -Pxxx -S192.168.1.223,49546 -dlocal -i"/test.sql" -o"/test.log"
我也复制了我的test.sql
文件内容供大家参考:
SET NOCOUNT ON
BULK INSERT test FROM
"\192.168.1.223\test.csv"
WITH
(
MAXERRORS = 1000000,
CODEPAGE = 1251,
FIELDTERMINATOR = '~%',
ROWTERMINATOR = '0x0a'
)
GO
SELECT CONVERT(varchar,@@ROWCOUNT) + ' rows affected'
GO
插入操作在上述过程中运行良好。但我担心的是,如果由于数据类型或数据长度而出现任何错误,该行将被拒绝,我无法追踪到特定的行。
每次我都要查看日志文件中被拒绝的行号和数据文件来检查相应的行。
是否有任何选项可以将 error/rejected 行生成到另一个文件,就像我们在 ORACLE - SQLPLUS 实用程序中生成 错误 文件?
我认为您要查找的选项不在 sqlcmd 中,而是在 BULK INSERT
:
ERRORFILE ='file_name'
Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. These rows are copied into this error file from the data file "as is."
目前我正在使用 SQLCMD 实用程序将 CSV 数据加载到 SQL 服务器。下面是我在命令提示符下执行的加载数据的命令:
sqlcmd -Usa -Pxxx -S192.168.1.223,49546 -dlocal -i"/test.sql" -o"/test.log"
我也复制了我的test.sql
文件内容供大家参考:
SET NOCOUNT ON
BULK INSERT test FROM
"\192.168.1.223\test.csv"
WITH
(
MAXERRORS = 1000000,
CODEPAGE = 1251,
FIELDTERMINATOR = '~%',
ROWTERMINATOR = '0x0a'
)
GO
SELECT CONVERT(varchar,@@ROWCOUNT) + ' rows affected'
GO
插入操作在上述过程中运行良好。但我担心的是,如果由于数据类型或数据长度而出现任何错误,该行将被拒绝,我无法追踪到特定的行。
每次我都要查看日志文件中被拒绝的行号和数据文件来检查相应的行。
是否有任何选项可以将 error/rejected 行生成到另一个文件,就像我们在 ORACLE - SQLPLUS 实用程序中生成 错误 文件?
我认为您要查找的选项不在 sqlcmd 中,而是在 BULK INSERT
:
ERRORFILE ='file_name'
Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. These rows are copied into this error file from the data file "as is."