在使用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数据库执行此显式传递。
答案 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代码中之前删除行尾注释。