带有 --注释的 SAS 显式直通转换为单行



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

当您使用 --comments传递查询时,这会带来问题。

例:

以下代码将在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*/

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

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

我认为这根本不是 SAS 问题,而是 ODBC 驱动程序问题。

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

proc SQL中似乎没有记录的选项可以做到这一点。您可以尝试询问SAS技术支持,看看他们是否有任何建议。

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

好吧,我真的很讨厌回答我自己关于SO的问题,但这是SAS技术支持(support@sas.com)的官方答案:

你好约书亚,我对此做了一些额外的检查。不幸 正如您所注意到的那样,SAS 不会保留换行符。此外,SAS/ACCESS 引擎没有诸如 PRESERVE_COMMENTS在Oracle引擎中看到的。没有真正的方法 强制使用换行符传递此内容。块注释将 成为下一个最佳选择。 对于给您带来的不便,我深表歉意。 请 如果有任何问题或疑虑,请告诉我。

谢谢

肖恩

字符串在粘贴到 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 代码中之前将其删除。

相关内容

  • 没有找到相关文章

最新更新