SQL to SAS ODBC connection - truncation of NVARCHAR(max) but getting ERROR: The option dbtype is not a valid output data set option

SQL to SAS ODBC connection - truncation of NVARCHAR(max) but getting ERROR: The option dbtype is not a valid output data set option

我有一个 table 存储在 SQL Server Management Studio 版本 15.0.18369.0 中,我有一个工作和建立的 ODBC 连接到 SAS 语言程序 World Programming Software 版本 3.4。

此数据的前一个 import/reading 已成功,但 SQL 服务器的操作员最近可能已将其数据类型转换为 NVARCHAR(max)。这也可能是由于驱动程序更改(我买了一台新笔记本电脑并重新安装了我认为与以前完全相同的 SQl 驱动程序的 OBDC,但谁知道)我有 64 位 ODBC 驱动程序 17 SQL服务器。 SQL 中的 VARCHAR(max) 类型导致数据在每列中只有 1 个字符长。

我尝试通过以下方式修复它:

将 DB 最大文本选项添加到 libname

libname odbclib odbc dsn="xxx" user="xxx" password="xxx" DBMAX_TEXT=8000;

这没有任何作用所以我也尝试添加数据库类型选项:

data mydata  (dbtype=(mycol='char(25)')) ;
    set odbclib.'sql data'n
run;

我得到错误:

The option dbtype is not a valid output data set option.

我也尝试过 DBSASTYPE,并将两个选项都放在 set 语句中,这会产生相同的错误。

我也试过 proc SQL:

proc sql noprint;
 CONNECT TO ODBC(dsn="xxx" user="xxx" password="xxx");  create table
 extract(compress=no dbsastype=(mycol='CHAR(20)')) as   select * from
 connection to odbc     (       select * from dbo.'sql data'n 
            );  disconnect from odbc; quit;

然后我得到

NOTE: Connected to DB: BB64 (Microsoft SQL Server version 12.00.2148) NOTE: Successfully connected to database ODBC as alias ODBC. 3915
create table extract(compress=no dbsastype=(mycol='CHAR(20)')) as 3916 select * from connection to odbc 3917 ( 3918 select * from dbo.'sql data'n ERROR: The option dbsastype is not a valid output data set option 3919 3920 ); 3921
disconnect from odbc; NOTE: ERRORSTOP was specified. The statement will not be executed due to an earlier error NOTE: Statements not executed because of errors detected 3922 quit;

可以尝试的一件事是将 DBTYPE 或 DBSASTYPE 放在正确的位置。

data mydata;
    set odbclib.'sql data'n(dbtype=(mycol='char(25)'));
run;

这是一个将在“设置”而不是“数据”行上进行的选项。

我还鼓励您与开发人员联系,因为这似乎是他们实施中的一个错误;或者尝试不同的 ODBC SQL 驱动程序。

也许同时的解决方法是在直通中使用 CONVERT?

proc sql noprint;
 CONNECT TO ODBC(dsn="xxx" user="xxx" password="xxx");  create table
 extract as   select * from
 connection to odbc     (       select a,b,c,convert(NCHAR(20),mycol) from dbo.'sql data'n 
            );  disconnect from odbc; quit;