1

我想将 SAS 连接到 Microsoft SQL Server 数据库,但没有成功。

我已经有一个使用 NT 身份验证的数据库连接。

例如,当我想将 R(统计软件)连接到数据库时,我会这样做

ch_db <- odbcConnect("sql_nt")

但是当我在 SAS 中这样做时,它不起作用:

LIBNAME sql ODBC DSN='sql_nt';

我有这个错误信息:

错误:未分配 Libname SQL。错误:LIBNAME 语句中的错误。错误 22-7:无效的选项名称 SQL_NT。

我可能犯了一个愚蠢的错误,但我没有看到。

4

4 回答 4

3

在 SAS 中进行 ODBC 连接到 SQL SERVER;首先使用Windows ODBC 数据源管理器创建一个用户 DSN。我使用 SQL Server Native Client 和默认值。

然后在 SAS 中执行以下语句

libname mySasLib odbc datasrc='myUserDSN';

或者,从 SAS Explorer 窗口 GUI 中,选择New以调用 New Library Dialog。

请注意,您计算机上的 DSN 源将列在“数据源”下拉列表中。

用户 ID、密码和选项字段是可选的,对于 Windows 集成安全性留空。

新建库对话框;

SUBSEQUENTLY——获得 SQL pass-through 的强大功能——这里是在 Work 中创建虚拟视图的语法;这对我的情况来说是一个令人难以置信的性能提升。

proc sql;
connect to ODBC as mycon (datasrc='myUserDSN');
create view one as
select colA, colB from connection to mycon
(select colA, colB from tableInDataSrc order by colA);
disconnect from mycon;
quit;

然后是这样的:

proc univariate data=one;
by colA;
histogram colB;
run;
于 2015-04-28T05:30:51.473 回答
2

看看这个页面: http: //support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a001355231.htm

具体来说,我认为你应该这样尝试:

libname mydblib odbc user=testuser password=testpass datasrc=mydatasource;

通常,您应该在连接到 SQL 服务器时提供用户名和密码。我假设您已经验证了 ODBC 连接设置正确(例如使用 R 进行测试)。

从评论中编辑:如果您使用 NT 身份验证,请按照此处的说明进行操作:(来自http://support.sas.com/techsup/technote/ts802.pdf

libname odbclib odbc noprompt="dsn=sql_NT;Trusted_Connection=yes" 
schema=DBO; 

我怀疑只是 dsn="stuff" 的旧样式不适用于新版本 - 尽管我只使用 OLEDB 所以我不是 100% 确定。

于 2013-05-22T17:01:05.007 回答
0

我尝试使用 proc sql 语句和 libname 格式进行连接。后者似乎对用户更友好,这里有一个例子:

  LIBNAME testLib ODBC DSN='sqlserver' user=userID pw=xxxxxxxx schema=dbo;
  title 'Testing Libname Option';
  proc contents data= testLib.mytable;
  proc print data=testLib.mytable(obs=10); 

UserID 和 PWD 需要来自您的 ODBC 连接设置。

于 2018-01-12T22:03:46.367 回答
0

我是一个 SAS 新手,浪费了很多时间来尝试创建一个“用户 DSN”。谢天谢地,我咨询了公司的管理团队。一位 SAS 管理员回答“DSN 是在 SAS 服务器端配置的”,她要求提供“MSSQL 数据库和 SAS 服务器名称”并为我创建了 DSN。

建立连接后,我使用以下查询

(PS:我用的是windows认证)


LIBNAME sql odbc = 'xxxxxx' ;
LIBNAME myfolder 'xxxxxxxxxxxxxxxx' ;

    proc sql;
        create table sql.target_table as select * from myfolder.mydata ;
    quit;

于 2019-12-18T12:22:26.307 回答