SAS显式传递--comments转换为单行

时间:2018-01-30 13:02:39

标签: sql sas netezza proc-sql pass-through

在使用SAS执行显式传递时,文本不会以与在编辑器或.sas文件本身中布局相同的方式传递到服务器。 SAS似乎只在一行上提供文本。

如果您使用 - 评论传递查询,则会出现问题。

示例:

以下代码将被"展平"在 PROC SQL 显式传递中:

SELECT * --this is my comment
FROM myTable
WHERE
    1 = 1

,服务器会像这样收到它:

SELECT * --this is my comment FROM myTable WHERE 1 = 1

正如您所看到的,评论短划线后的所有内容都是...... 评论。

是否有人知道可以与 PROC SQL 一起使用的特殊选项或配置,以确保不会发生这种情况?我知道有了SAS,这些评论中的每一条都可以转换为:

/*comments like this*/

但是为了这个问题,让我们假装不是一个选项,并且有必要在代码中维护 - comments

编辑:我应该注意到我正在对IBM Netezza数据库执行此显式传递。

4 个答案:

答案 0 :(得分:2)

我不相信这是一个SAS问题,除了ODBC驱动程序问题。

我能够将针对ODBC连接的问题复制到mySQL数据库,并使用与SAS以外的程序相同的ODBC连接复制该问题。

答案 1 :(得分:1)

proc SQL中似乎没有记录的选项可以执行此操作。您可以尝试询问SAS技术支持,看看他们是否有任何建议。

我自己的建议是在查询字符串中应用正则表达式替换,以便在通过传递提交之前删除任何注释。

答案 2 :(得分:1)

好吧,我真的不想在SO上回答我自己的问题,但这是SAS技术支持(support@sas.com)的官方回答:

  

约书亚你好,我做了一些额外的检查。的不幸的是   正如您所注意到的那样,SAS不会保留换行符。   此外,SAS / ACCESS引擎没有诸如此类的功能   在Oracle引擎中看到的PRESERVE_COMMENTS。 没有真正的方法   强制将其与换行符一起传递。块注释将会   是下一个最好的选择。我很抱歉给您带来不便。请   如果有任何问题或疑虑,请与我联系。

     

谢谢,

     

肖恩

答案 3 :(得分:0)

粘贴到StackOverFlow时如何突出显示字符串并不重要。这是数据库收到该字符串时的作用。它是否将双连字符视为试图减去某些已将否定运算符作为前缀的值?或者它将它视为行尾注释?

至少在Teradata中,数据库正在将--识别为开始注释,但由于它只获得一行代码,因此它会注释掉所有其余代码。

 70         select * from connection to td
 71         (select 1+2 -- Comment in line
 72           +3 as name
 73           , 4+5 as value
 74         
 75         )
 76         ;

 TERADATA_0: Prepared: on connection 0
 select 1+2 -- Comment in line +3 as name , 4+5 as value

因此它运行时没有错误,但它只返回一个值3,因为它是1和2的总和。

另请注意,在SAS --中没有特殊含义。它只是两个-彼此相邻。尝试此查询,您将看到X与AGE具有相同的值。

select name,age,--age as x
from sashelp.class
;

使用源代码和行尾注释在数据库中创建一个存储过程,您可以从SAS调用该过程,或者在将它们包含在PROC SQL代码中之前删除行尾注释。