【问题标题】:SAS SQL Server connectivity without using ODBC不使用 ODBC 的 SAS SQL Server 连接
【发布时间】:2019-07-16 00:04:46
【问题描述】:

是否可以在不使用 ODBC 的情况下通过 SAS 连接到 SQL Server?

如果答案是肯定的,你能给出一个代码示例来说明如何做到这一点吗?

【问题讨论】:

  • 似乎很久以前就问过同样的问题:stackoverflow.com/questions/36337620/…
  • 那篇文章没有回答这个问题。它只讨论了通过 ODBC 连接的方法,而不是没有 ODBC。
  • 没有什么 ODBC? ODBC 许可证或 ODBC 驱动程序或 DSN 中设置的 ODBC?我认为您需要更具体地找到解决方法。
  • 我感觉到这里有一个 XY 问题。为什么不能使用 ODBC?

标签: sql-server sas odbc oledb


【解决方案1】:

OleDb。这是你的两个选择。您还可以使用 Web 服务来前置 SQL Server 数据库并使用 PROC HTTP 或 PROC SOAP(首选是 REST/JSON)。对于直接访问,您需要用于 SQL Server、ODBC 或 OleDB 的 SAS Access 引擎。

【讨论】:

  • 另外,如果您有 SAS 9.4M6 和新的 JDBC 访问引擎,您现在可以使用 JDBC
【解决方案2】:

是的,这是可能的。您可以作为 libname 或在 proc sql 中执行此操作。我建议在上传时使用 insertbuff-option。只要确保你的用户名、密码和服务器没有被引用,就像在 oleDb 连接中一样。

libname My_libname odbc noprompt = 
    "DRIVER=SQL Server; server=&server.; Uid=&userName.;Pwd=&password.; DATABASE=&Database.;"
      INSERTBUFF=32767;

第二种方式是

proc sql;
    connect to odbc as my_conn
    (noprompt = "DRIVER=SQL Server; server=&server; Uid=&user.; Pwd=&password.; DATABASE=&database.;");

    create table Query_result as 
    select * from connection to my_conn (
        select * from table_in_server_database 
    );
quit;

更多信息请阅读SAS support page

【讨论】:

  • 这两种方法都使用 ODBC - 它在您的代码中。
  • @Reeza 哎呀。有还是没有。阅读理解是 !#!#!。
【解决方案3】:

虽然这在技术上使用 ODBC/OLEDB,但您不需要获得 SAS 许可...编写一个 VBScript(可能接收从 SAS 传递的参数),它使用系统 ODBC/OLEDB 驱动程序连接到您的数据源,执行查询,并返回分隔记录。

然后通过管道infile执行所述VBScript,将记录读入SAS。

我定期针对多个数据源(Informix、SQL Server、DB2、MSAccess/Excel)执行此操作。

【讨论】:

    【解决方案4】:

    我无法评论 Chris J 的回答,但这是一个很酷的想法。我会对其进行一些修改(建议)。跳过 VBScript,因为它已经过时并且在很多地方都是不允许的。使用 .NET Core/C# 和 Entity Framework。 EF 是一个完整的 ORM,易于使用,并且会自动神奇地发现几乎每个数据库上的整个数据库结构。使用内存缓冲区将数据流回。

    喜欢 Chris 的回答,但只是将其更新为更现代的机制。必须试一试,因为这是解决问题的巧妙方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      相关资源
      最近更新 更多