尝试使用任务/导出数据菜单将表导出为平面文件。
我正在尝试导出到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)
它可能需要更新或下载,并且肯定需要目标数据库服务器。