尝试使用任务/导出数据菜单将表格导出到平面文件。
我正在尝试导出到 ANSI 1252 代码页。
我的表中有一些
nvarchar
列。
我收到消息:
数据类型为 DT_NTEXT .... ANSI 文件不支持...使用 DT_TEXT 代替并使用数据转换组件将数据转换为 DT_NTEXT。
我尝试将“列映射”部分中的源列映射从 Unicode 字符串
DT_WSTR
更改为字符串DT_STR
,但没有用。
是否可以在不更改表格的情况下导出到 ANSI 文件?有更容易的方法吗?我找不到将源列更改为常规
varchar
字符串的方法。
对于任何寻找替代解决方案的人;
这为我解决了上述问题。
如果您无法更改源列,则必须使用 数据转换组件 来转换数据。
更改源列是最简单但并不总是一个选项。例如,我正在使用
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 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)
它可能需要更新或下载,并且肯定需要目标数据库服务器。