1

我在将查询传递给 SQL Server 时遇到了一些麻烦。操作系统是 RedHat 6。在 SAS Enterprise Guide 中,我尝试执行以下代码:

LIBNAME CISCO SQLSVR  DBLIBINIT='SET ANSI_NULLS, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING ON'  Datasrc="nikolaev.ivan.ru"  SCHEMA=cc  USER=vorob2  PASSWORD="{SAS002}9930904131DC199B130A9E7D42A49B5D" ;
proc sql;
insert into CISCO.vContact_I (FirstName, MidName, LastName, Address, Phone, MobilePhone, EMail, ClientCode, AddInfo, Sex, TOPIC_ID, CUSTOMER_RK, RESPONSE_TRACK_CD, QuestFlag, CriticalMessage, RegularMessage) 
     values ('N/A','AO Lomon', 'Воронин Саша', 'N/A/N/A/N/A мес/платеж N/A','N/A', 'N/A','N/A','01039602','',1,.,'01039602','26670201',0,'N/A','N/A');
quit;

但我遇到了错误:

错误:CLI 执行错误:[SAS][ODBC SQL Server 有线协议驱动程序][Microsoft SQL Server]INSERT 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'。验证 SET 选项对于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作是否正确。: [SAS][ODBC SQL Server Wire Protocol driver][Microsoft SQL Server]无法准备语句。

如果我尝试将QUOTED_IDENTIFIER选项放入execute语句中,它可以正常工作:

proc sql;
connect to sqlsvr as sql 
(Datasrc="nikolaev.ivan.ru"  USER=vorob2  PASSWORD="{SAS002}9930914010DC199B130A9E7D42A49B5D");
execute(
SET QUOTED_IDENTIFIER ON;
insert into cc.vContact_I (FirstName, MidName, LastName, Address, Phone, MobilePhone, EMail, ClientCode, AddInfo, Sex, TOPIC_ID, CUSTOMER_RK, RESPONSE_TRACK_CD, QuestFlag, CriticalMessage, RegularMessage) 
     values ('N/A','AO Lomon', 'Воронин Саша', 'N/A/N/A/N/A мес/платеж N/A','N/A', 'N/A','N/A','01039602','',1,'','01039602','26670201',0,'N/A','N/A');
) by sql;

有没有机会使用QUOTED_IDENTIFIERSQLSVR LIBNAME STATEMENT?用于 ODBC 和 OLEDB 的 SAS/ACCESS 组件未获得许可。

4

1 回答 1

1

@Jdzel 您使用什么类型的连接?

尝试添加参数CONNECTION=SHAREDREAD
Libname 语句将类似于:

LIBNAME CISCO SQLSVR  
DBLIBINIT='SET ANSI_NULLS, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING ON' 
CONNECTION=SHAREDREAD  Datasrc="nikolaev.ivan.ru"  SCHEMA=cc  
USER=vorob2  PASSWORD="{SAS002}9930904131DC199B130A9E7D42A49B5D" ;
于 2017-01-25T11:50:40.723 回答