数据类型为DT_NTEXT,ANSI文件不支持

问题描述 投票:0回答:4

尝试使用任务/导出数据菜单将表格导出到平面文件。

我正在尝试导出到 ANSI 1252 代码页。

我的表中有一些

nvarchar
列。

我收到消息:

数据类型为 DT_NTEXT .... ANSI 文件不支持...使用 DT_TEXT 代替并使用数据转换组件将数据转换为 DT_NTEXT。

我尝试将“列映射”部分中的源列映射从 Unicode 字符串

DT_WSTR
更改为字符串
DT_STR
,但没有用。

是否可以在不更改表格的情况下导出到 ANSI 文件?有更容易的方法吗?我找不到将源列更改为常规

varchar
字符串的方法。

sql-server export
4个回答
88
投票

对于任何寻找替代解决方案的人;

  • 编辑您的平面文件连接管理器
  • 在常规选项卡中
  • 勾选“Unicode”,确定

这为我解决了上述问题。


7
投票

如果您无法更改源列,则必须使用 数据转换组件 来转换数据。

更改源列是最简单但并不总是一个选项。例如,我正在使用

XML FOR PATH
返回分隔列表,因为我是在存储过程中执行此操作,所以我需要做的就是将列转换为
varchar(max)
,错误消失了,SSIS 很高兴。

select distinct 
    [WhatIfId],
      cast(stuff
        (
            (
                select 
                    '; ' + plr.[Label] 
                from [dbo].[track_rate_override_reasons_instance] tor
                join [dbo].[PickList_Loans_WhatIf_Rate_OverrideTypes] plt
                    on plt.[OverrideTypeId] = tor.[OverrideTypeId]
                join [dbo].[PickList_Loans_WhatIf_Rate_OverrideReasons] plr
                    on plr.[ReasonId] = tor.[ReasonId]
                FOR XML PATH ('')
            )
            , 1, 1, '') as varchar(max))  AS 'OverrideReasons'
from [dbo].[track_rate_override_reasons_instance]

您是否可以将源代码包装在存储过程中,以便您可以操纵转换?


3
投票

记录一下,我今天遇到了类似的问题。在 DT_TEXT、DT_NTEXT、DT_WSTR、DT_STR 之间混洗数据类型,ANSI 和 UNICODE 格式组合都不起作用。了解问题出在数据类型为 varchar(max) 的源字段 - 不确定我们为什么分配此数据类型。将其更改为 nvarchar(50) 并且导出工作没有任何问题,并且无需更改导出向导中的数据类型。


0
投票

在使用 SQL Server 和 SQL Server Integration Services 后,建议的方法有效,但如果您使用 Python 导入脚本,假设您正在运行 Python,那么麻烦会大大减少。

import numpy as np
# csv.field_size_limit(sys.maxsize)
import sys
import csv
import pandas as pd
import pyodbc
from sqlalchemy import create_engine
import urllib
import matplotlib.pyplot as plt
dtype=np.int64

data1 = pd.read_csv (r'<path>\<file>.csv', sep='\\t',  engine='python', encoding = \utf-16\) 
df2 = pd.DataFrame(data1)

params =  urllib.parse.quote_plus(\DRIVER={SQL Server};SERVER=MyMachineName\\MyInstance;DATABASE=MyDBName;Trusted_Connection=yes;\)
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine = create_engine(conn_str)

# create the table
df2.to_sql(\MyTableName\, engine)

它可能需要更新或下载,并且肯定需要目标数据库服务器。

© www.soinside.com 2019 - 2024. All rights reserved.