Sql server 插入表时bcp出现特殊字符问题
我有一个带有特殊字符的文本文件Sql server 插入表时bcp出现特殊字符问题,sql-server,bcp,Sql Server,Bcp,我有一个带有特殊字符的文本文件 #ID^&^DESCRIPTION^&^DATEINS 1^&^This is a test rec^&^12/23/2019 11:31:48 2^&^A Unique identification number (IČO) ^&^10/21/2019 07:36:48 4^&^Test 3 row known as ÖNACE 2020^&^11/02/2009 07:36:48 这是我创建的表
#ID^&^DESCRIPTION^&^DATEINS
1^&^This is a test rec^&^12/23/2019 11:31:48
2^&^A Unique identification number (IČO) ^&^10/21/2019 07:36:48
4^&^Test 3 row known as ÖNACE 2020^&^11/02/2009 07:36:48
这是我创建的表
CREATE TABLE [dbo].[TESTtbl](
[id] [int] NOT NULL,
[desc] [nvarchar](MAX) collate Latin1_General_CI_AS,
[DATEINS] [datetime] NULL,
)
ON [PRIMARY]
我构建了下面的格式文件
10.0
3
1 SQLCHAR 0 12 "^&^" 1 cd_val_id ""
2 SQLNCHAR 0 0 "^&^" 2 bus_desc SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 24 "\r\n" 3 DateIns ""
我在表中没有看到bus_desc列的正确字符。如何修复此问题
这是我使用的bcp命令
bcp.exe DBNAME.[dbo].[TESTtbl] in "c:\temp\some.txt" -T -f "c:\temp\formatfile.fmt" -C -S"SERVERNAME\INSTANCENAME" -F2 -t "^&^" -e "c:\temp\err.txt" -o "c:\temp\bcpout.txt"
一种方法是将所有数据加载到表中,然后进行操作。请查找以下代码:
drop table if exists [dbo].[TESTtbl]
CREATE TABLE [dbo].[TESTtbl](
[id] [int] NOT NULL,
[desc] [nvarchar](MAX),
[DATEINS] [datetime] NULL,
)
drop table if exists [dbo].TESTtbl_new
CREATE TABLE [dbo].[TESTtbl_new](
[desc] [nvarchar](MAX)
)
declare @cmd nvarchar(100) = 'bcp DBNAME.dbo.[TESTtbl_new] in "FILE_PATH" -T -c -C 65001 -S SERVERNAME\INSTANCENAME'
exec xp_cmdshell @cmd
select * from [TESTtbl_new]
update [TESTtbl_new]
set [desc] = replace([desc], '^&^', '@') --assuming actual data wouldn't have '@'
;WITH C AS(
SELECT [desc] AS ID
,value
,ROW_NUMBER() OVER(PARTITION BY [desc] ORDER BY (SELECT NULL)) as rn
FROM [TESTtbl_new] TT
CROSS APPLY STRING_SPLIT([desc], '@')t
)
INSERT INTO [TESTtbl]
SELECT [1] AS ID
,[2] AS [DESCRIPTION]
,[3] AS [DATEINS]
FROM C
PIVOT(
MAX(VALUE)
FOR RN IN([1],[2],[3])
) as PVT
WHERE [1] <> '#ID'
select * from [TESTtbl]
结果:
还应包括用于加载数据的bcp命令。bcp文件bus_desc中定义的第二个字段设置为进入第3列,该列仅为24字节。您还应该缺少DATEINS数据。格式文件的最后一列应该是1、2、3。。。不是1,3,11。当您告诉BCP将3列输入数据放入表的字段11时,BCP并没有失败,这让我很惊讶。没有字段11,对吗?@jamie,我更正了文件格式并添加了bcp命令您的bcp命令没有使用-f选项?-f选项用于指定格式文件的位置。现在,您是否可以确认bcp命令确实是您使用的命令,并确认您是否真的打算使用格式化文件,而不是将其添加为一个答案?我想你只是误用了bcp命令。yikes,我试过使用没有格式文件的-c和-f格式文件。两个都不起作用。我更新了bcp命令