2016-11-22 27 views
2

Excelで動作するSQLクエリがありますが、次のコードが使用されています。Excelセルを使用してOPENQUERY SQLにパラメータを追加する

SET QUOTED_IDENTIFIER OFF 

SELECT * 
FROM OPENQUERY (
    INSQL, 
    "SELECT DateTime = convert(nvarchar, DateTime, 21), [TagName] 
    FROM WideHistory 
    WHERE wwRetrievalMode = 'Cyclic' 
      AND wwCycleCount = 100 
      AND wwVersion = 'Latest' 
      AND DateTime >= '20161122 08:33:00.000' 
      AND DateTime <= '20161122 08:38:00.000'" 
) 

ExcelセルにDateTimeを追加しようとしています。フォーラムを通じて読んでみると、OPENQUERYのパラメータ設定は、Excelの通常のSQLクエリと同じように単純ではありません。

これらのパラメータを変更できるExcelでセルをリンクする方法はありますか?

答えて

1

ドキュメント:OPENQUERY (Transact-SQL)

構文OPENQUERY(linked_server、 'クエリ')。 OPENQUERYは、その引数に変数 を受け入れません。

'問合せは、' クエリ文字列

文字列としてクエリを作成し、

DECLARE @dt_start DATETIME = '2016-11-22 08:33:00.000'; 
DECLARE @dt_end DATETIME = '2016-11-22 08:38:00.000'; 

DECLARE @query VARCHAR(MAX); 
DECLARE @openquery VARCHAR(MAX); 

SELECT @query = 'SELECT DateTime = convert(nvarchar, DateTime, 21), [TagName] 
       FROM WideHistory 
       WHERE wwRetrievalMode = ''Cyclic'' 
       AND wwCycleCount = 100 
       AND wwVersion = ''Latest'' 
       AND DateTime >= ''' + CONVERT(VARCHAR(23), @dt_start, 121) + ''' 
       AND DateTime <= ''' + CONVERT(VARCHAR(23), @dt_end, 121) + ''''; 

--SELECT @query; 

SELECT @openquery = 'SELECT * FROM OPENQUERY (INSQL, ''' + REPLACE(@query, '''', '''''') + ''')'; 

--SELECT @openquery; 

EXEC (@openquery); 
+0

上記のクエリは機能しますが、プログラミングの経験がほとんどないため、ユーザーの視点からExcelセルからVBA/Excelを使用して@dt_startを設定する方法を説明してください。ユーザーがコードを変更する必要はありません。ありがとう –

+0

このコードは、ストアプロシージャ内にある必要があります。ストアドプロシージャにはパラメータを渡す機能があります。 –

+0

dt_start DATETIME = '2016-11-22 08:33:00.000'; dt_end DATETIME = '2016-11-22 08:38:00.000'; ハードコードされた値はテスト用です。 これらの変数は、プロシージャのパラメータを格納する必要があります。 VBAからストアドプロシージャを実行すると、セルの値をパラメータとして渡すことができます。 –

0

を実行-isこれを試してみてください。

EXECUTE sp_executesql @openquery 
関連する問題