【问题标题】:SAS read a table from a SQL Server connection with name containing special charactersSAS 从 SQL Server 连接中读取名称包含特殊字符的表
【发布时间】:2016-11-01 15:31:06
【问题描述】:

我在 SAS 中有一个与 sql server 表的连接,其中表名为“Additions_to_Aggregate$”。引号是名称的一部分。因此,在我的 SAS 编辑器中,当我尝试在部分代码中运行以下内容时,我返回了错误,因为 SAS 将其作为字符串而不是表名读取。

proc sql;
Create Table Name_Compare as
SELECT DISTINCT a.Insured_Name, agg.Policy_Holder_Name, a.Segment
FROM MySQLLib.ADV_Portfolio_Split as a
LEFT JOIN MySQLLib.'Additions_to_Aggregate$'n.data as agg 
on a.Insured_Name = agg.Policy_Holder_Name;
quit;

有什么方法可以强制 SAS 将表名读取为文字字符串,或者您有其他解决方案的想法吗?我已经尝试在 SAS 资源管理器中重命名表,但我收到此错误并且不知道如何解释它。

【问题讨论】:

  • @BeanFrog 假设这是 SAS 语法,据我所知,这在 SAS 中不起作用,那就是 SQL Server 语法。
  • 澄清一下,Cole,您不是在直通 (connect to sql... select * from connection to sql ( )) 中执行此操作,而是在使用 LIBNAME 连接的 SAS 语法环境中执行此操作(MySQL 是 sql 数据库的库名)?
  • @Joe 是的,这是 SAS 语法。我编辑了我的原始帖子以显示这一点。另外,让您知道我已对您的原始解决方案进行了回复。

标签: sql sql-server sas


【解决方案1】:

您正在寻找名称文字。要么:

LEFT JOIN MySQL.'Additions_to_Aggregate$'n

LEFT JOIN MySQL."'Additions_to_Aggregate$'"n

取决于 SAS 如何处理 DBMS 连接中的引号;它可能需要也可能不需要第二对外部引号。如果由于某种原因您需要单引号(SAS 在宏分辨率之外对单/双没有任何特殊含义),您可以将它们加倍:

LEFT JOIN MySQL.'''Additions_to_Aggregate$'''n

【讨论】:

  • 我尝试了你写的第一个解决方案。看起来 SAS 现在确实将其识别为数据表,但看起来它正在读取 n 作为表名的一部分。 SAS 在错误中返回: LEFT JOIN MySQLLib.'Additions_to_Aggregate$'n.data as agg
  • 其余的错误是什么?这就是我期望 SAS 做的事情。错误可能是表不存在(在这种情况下可能需要第二种/第三种情况),但也可能是其他原因?
  • 这是整个错误proc sql; 87 创建表 Name_Compare 作为 88 SELECT DISTINCT a.Insured_Name, agg.Policy_Holder_Name, a.Segment 89 FROM MySQLLib.ADV_Portfolio_Split 作为 90 LEFT JOIN MySQLLib.'Additions_to_Aggregate$'n 作为 agg 91 on a.Insured_Name = agg.Policy_Holder_Name;错误:文件 MYSQLLIB.'Additions_to_Aggregate$'n.DATA 不存在。
  • 其实在研究之后,你建议的第二种方法是可行的。我搞砸了,因为我添加了下划线字符而不是空格。由于它会自动在我的表格中的字段名称中添加下划线,因此我认为它也会对表格名称执行此操作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多