Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

OPENQUERY löst einen Fehler aus, wenn es mit WIN2K8\SQL2K12 verwendet wird

Sie müssen DATETIME-Werte in einfache Anführungszeichen setzen. Und da sich Ihre Abfrage selbst in einem String befindet, müssen diese einfachen Anführungszeichen wie folgt verdoppelt / maskiert werden (und Sie sollten wahrscheinlich auch den Wert des ersten Parameters in einfache maskierte Anführungszeichen setzen, da es sich eindeutig um einen String handelt).

Sie sollten auch den Namen der gespeicherten Prozedur mit [DatabaseName].[SchemaName]. vollständig qualifizieren .

Und seit dem vcs_gauge proc Dynamic SQL verwendet, müssen Sie WITH RESULT SETS angeben Klausel. Weitere Informationen zu dieser Klausel finden Sie auf der MSDN-Seite für EXECUTE .

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} );
             ');