我坚持将数据从一个表插入另一个表并使用bcp
将数据导出到csv文件中。问题是csv文本文件包含null
而不是''空字符串。
当我从另一个表中将数据插入表中时,空字符串列被视为NULL
。执行bcp
命令会生成正确的文件。
我正在使用此命令导出bcp
bcp ClientReportNewOrder out "D:\Temp\Neeraj\TestResults\oOR.txt" -c -t"," -r"\n" -S"." -U"sa" -P"123"
这用于将数据插入表
insert into ClientReportNewOrder
select * from ClientReportNewOrder_import
答案 0 :(得分:1)
经过大量的头脑风暴,我找到了解决方案。
执行Insert
声明
insert into ClientReportNewOrder select * from ClientReportNewOrder_import
按以下Dynamic
查询插入记录更新记录后。
DECLARE @qry NVARCHAR(MAX)
SELECT @qry = COALESCE( @qry + ';', '') +
'UPDATE ClientReportNewOrder SET [' + COLUMN_NAME + '] = NULL
WHERE [' + COLUMN_NAME + '] = '''''
FROM INFORMATION_SCHEMA.columns
WHERE DATA_TYPE IN ('char','nchar','varchar','nvarchar') and TABLE_NAME='ClientReportNewOrder '
EXECUTE sp_executesql @qry
按照上述步骤,我已经解决了这个问题。
如果有任何人有良好的技术达到相同的请发布。
答案 1 :(得分:0)
不确定bcp
但是如果您正在使用SQL查询(INSERT .. SELECT
构建)直接插入,如下所示
insert into ClientReportNewOrder
select * from ClientReportNewOrder_import
然后,您可以使用ISNULL()
或COALESCE()
功能解决此问题,如下所示(一个示例,考虑col3
有NULL
)
insert into ClientReportNewOrder(col1,col2,col3)
select col1,col2,ISNULL(col3,'') from ClientReportNewOrder_import
答案 2 :(得分:0)
您可以在表“ClientReportNewOrder”上使用触发器。
您可以创建的触发器是“而不是”触发表并检查其中的值是否为空,然后您可以强制写入“”>
CREATE TRIGGER trgInsteadOfInsert ON dbo.Yourtable
INSTEAD OF Insert
declare @value varchar(55)
BEGIN
BEGIN TRAN
if(@value is Null)
begin
Insert into Yourtable (Value) values (@value);
COMMIT;
End
End
希望这会有所帮助。