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;
我有一个 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;