与WIN2K8 \ SQL2K12一起使用时,OPENQUERY抛出错误

时间:2015-01-06 12:53:40

标签: sql-server-2012 openquery

我尝试使用以下Sql查询将存储过程结果移动到表



SELECT *
  INTO #tmpTable
FROM OPENQUERY(WIN2K8\SQL2K12, 'EXEC vcs_gauge  @gauge_name=vs1_bag,@first_rec_time=2014-09-01 09:00:00,@last_rec_time=2014-09-01 10:00:00')




当我执行查询时,抛出以下错误。

  

' \'

附近的语法不正确

我不想添加链接服务器。如何解决此问题?

EDIT1

当我执行[win2k8 \ sql2k12]时,首先执行以下命令

  

EXEC sp_serveroption' YourServer','数据访问',TRUE

收到新消息

  

OLE DB提供程序" SQLNCLI11"对于链接服务器" WIN2K8 \ SQL2K12"返回消息"延期准备无法完成。"。   Msg 8180,Level 16,State 1,Line 1   声明无法准备。   Msg 102,Level 15,State 1,Line 1   ' - '附近的语法不正确。

1 个答案:

答案 0 :(得分:0)

您需要将DATETIME值括在单引号中。由于你的查询本身就是一个字符串,所以这些单引号需要加倍/转义如下(你应该把第一个参数的值放在转义单引号中,因为它显然是一个字符串)

您还应该使用[DatabaseName].[SchemaName].完全限定存储过程名称。

由于vcs_gauge proc使用动态SQL,因此需要指定WITH RESULT SETS子句。有关此子句的更多信息,请参阅EXECUTE的MSDN页面。

SELECT *
INTO #tmpTable
FROM OPENQUERY([WIN2K8\SQL2K12],
             N'EXEC [DatabaseName].[SchemaName].vcs_gauge
                      @gauge_name = ''vs1_bag'',
                      @first_rec_time = ''2014-09-01 09:00:00'',
                      @last_rec_time = ''2014-09-01 10:00:00''
               WITH RESULT SETS ( { column_specification} );
             ');