临时库关联SQL Server的SAS表Tab1列名存入宏变量求助
解决SAS获取SQL Server临时表列名到宏变量的问题
原代码无法获取临时表列名的核心原因:SAS的dictionary.columns只同步了SQL Server的永久表元数据,会话级或全局临时表(如#Tab1/##Tab1)不会出现在SAS的字典视图中——这类表存储在SQL Server的tempdb数据库,且仅在特定会话/全局范围内可见,SAS默认不会同步其元数据。
可行解决方案:使用SAS Pass-Through直接查询SQL Server系统表
通过SAS的ODBC直通SQL,直接访问SQL Server的tempdb系统视图来提取临时表列名,代码示例如下:
%let colonnes = ; proc sql noprint; /* 替换为你的SQL Server ODBC数据源名称 */ connect to odbc (dsn=SQLServerDSN); select column_name into :colonnes separated by ',' from connection to odbc ( SELECT c.name AS column_name FROM tempdb.sys.tables t JOIN tempdb.sys.columns c ON t.object_id = c.object_id /* SQL Server会给临时表添加随机后缀,用LIKE匹配核心表名 */ WHERE t.name LIKE '%Tab1' /* 如果是全局临时表,调整为 WHERE t.name LIKE '%##Tab1%' */ ORDER BY c.column_id ); disconnect from odbc; quit; %put &colonnes;
关键说明
- 临时表在
tempdb中存储的名称会自动附加随机下划线和数字后缀(例如#Tab1会变为Tab1____00000000004C),因此用LIKE '%Tab1'做模糊匹配。 - 需确保SAS ODBC数据源拥有访问
tempdb系统视图的权限。
内容的提问来源于stack exchange,提问作者nadal
相关产品推荐
相关产品推荐

