【发布时间】:2018-12-05 19:22:08
【问题描述】:
我有一个包含 29,471 行的 CSV 文件 (shrlgpa.csv)。但是,当我将其导入 SQL Server 时,输出显示复制了 29,482 行。为什么会这样?
这是我使用的脚本,该脚本适用于所有其他 csv 文件:
USE master
GO
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE WITH OVERRIDE
GO
USE [VCC_BE_SQL_stg]
GO
DECLARE @cmd varchar(8000)
= CONCAT( '"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe"'
, ' VCC_BE_SQL_stg.VCC.{tbl} in C:\VCCBanner\{tbl}.csv'
, ' -a 65535 -b 10000 -c -F 2 -U mssql_stg -P password2012 -S'
, ' WIN-8I8OQB38II4\SQLEXPRESS2012 -t 0x7C -r 0x0A -E'
)
DECLARE @tables TABLE ( tbl varchar(255) PRIMARY KEY )
INSERT INTO @tables VALUES ('shrlgpa');
DECLARE @tbl varchar(255) = ( SELECT MIN(tbl) FROM @tables )
DECLARE @nth int = 0
DECLARE @cnt int = ( SELECT COUNT(1) FROM @tables )
DECLARE @sql varchar(255)= N'TRUNCATE TABLE VCC_BE_SQL_stg.VCC.'
DECLARE @run nvarchar(255)
WHILE ( @nth <> (@cnt) )
BEGIN
SET @tbl = (
SELECT tbl
FROM @tables
ORDER BY tbl
OFFSET @nth ROWS
FETCH NEXT 1 ROWS ONLY
)
--SET @SQL = (SELECT N'TRUNCATE TABLE VCC_BE_SQL_stg.VCC.' + @tbl)
SET @run = ( SELECT @sql + @tbl )
select @run
EXEC sp_executesql @run
SET @run = ( SELECT REPLACE( @cmd, '{tbl}', @tbl) )
select @run
EXEC xp_cmdshell @run
SET @nth = @nth + 1
END
我已经检查了字段的名称和数量,但我看不出有什么问题,尤其是它与其他文件完美配合
【问题讨论】:
-
这不是sql问题。我相信 csv 文件有空行。在 excel 或记事本中打开它并按 CTRL + END 我想你会看到问题。
-
@ZekiGumus,只有一个空行,删除它,结果相同
-
如果没有违规 CSV 的副本,以及(在极端情况下)表定义和所有相关触发器,我们可能会追尾。
-
如果没有足够的信息来重现问题,就无法诊断。
-
感谢大家的回答。问题是 csv 文件的路径,我猜我有点累,我没有注意到我正在从备份中编辑 csv 文件,而不是位于脚本路径中的那个。源文件的空行很少,这就是行数不正确的原因
标签: sql sql-server csv