【问题标题】:SQL pass-through SAS/ SAS EG - return a tableSQL pass-through SAS/SAS EG - 返回一个表
【发布时间】:2016-03-10 15:50:42
【问题描述】:

案例: 我想从 SAS 运行 SQL 传递,我想在我的工作库中输出。

问题: 日志告诉我一切都很好,但没有数据集输出? 我是这方面的大菜鸟 - 请帮忙。

Proc sql;

connect to odbc as mydb
    (dsn=x user=x password=x);


execute (  
DECLARE @return_value int 
EXEC    fpt.usp_Marcus_Buy_and_Sell_amounts
@Country ='DK',
@Date ='2016-01-01', 
@Date2='2016-02-01'  

SELECT  'Return Value' = @return_value 







        ) by mydb;


Quit;

【问题讨论】:

    标签: sas pass-through


    【解决方案1】:

    到目前为止,您只是要求 SAS 在数据库中执行查询。 要将表返回到您的 SAS 工作库,您需要在 SAS 端包含一个 create table 语句。

    例如

    Proc sql;
    
    connect to odbc as mydb
        (dsn=x user=x password=x);
    
    create table mydb_return as select * 
           from connection to mydb
             ( EXEC fpt.usp_Marcus_Buy_and_Sell_amounts
                @Country ='DK',
                @Date ='2016-01-01', 
                @Date2='2016-02-01' 
             );
    
    disconnect from mydb;
    
    Quit;
    

    编辑:根据 cmets 更改语句

    【讨论】:

    • 当我运行您的代码时,日志显示:错误:CLI 描述错误:[Microsoft][ODBC SQL Server Driver][SQL Server]必须声明标量变量“@return_value”。 : [Microsoft][ODBC SQL Server Driver][SQL Server]无法准备语句。但我刚刚声明了变量“@Return_value”?
    • 好的,变量不是全局的。尝试直接在create table语句中插入EXEC fpt.usp_Marcus_Buy_and_Sell_amounts @Country ='DK', @Date ='2016-01-01', @Date2='2016-02-01',不用declare和select。
    【解决方案2】:

    Jetzler 的回答很棒! 虽然我发现我可以将代码简化为:

    Proc sql;
    
    connect to odbc as mydb
        (dsn=x user=x password=x);
    
    create table mydb_return as select * 
           from connection to mydb
             (EXEC    fpt.usp_Marcus_Buy_and_Sell_amounts
    @Country ='DK',
    @Date ='2016-01-01', 
    @Date2='2016-02-01'  
     ) ;
    
    disconnect from mydb;
    
    
    Quit;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      相关资源
      最近更新 更多