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



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

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

我的表中有一些nvarchar列。

我正在接收消息:

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

我已经尝试改变源列映射在列映射部分从Unicode字符串DT_WSTR到只是字符串DT_STR,它没有工作。

是否可以导出到ANSI文件而不改变我的表?有更简单的方法吗?我找不到一种方法将源列更改为常规varchar字符串。

寻找替代解决方案的人;

    编辑平面文件连接管理器
  • 在General选项卡
  • 勾选'Unicode', OK

这为我解决了上述问题。

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

更改源列是最简单的,但并不总是一个选项。例如,我使用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]

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

我今天也遇到了类似的问题。在DT_TEXT, DT_NTEXT, DT_WSTR, DT_STR之间变换数据类型,对于ANSI和UNICODE格式组合都不起作用。理解这个问题是数据类型为varchar(max)的源字段-不确定为什么要分配这个数据类型。将其更改为nvarchar(50),导出工作没有任何问题,也不需要更改导出向导中的数据类型。

使用SQL Server和SQL Server集成服务,建议的方法可以工作,但如果您使用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)

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

最新更新