質問者
エラスティッククエリでWHERE句に'default'という値を使うとエラーになる

質問
-
Azure上に
・AzureSQLデータベースA(以下DBA)
・AzureSQLデータベースB(以下DBB)
の2つのデータベースがあり(サーバは同じです)、
DBBからDBAのエンティティを参照するため(シノニムのよう)に、エラスティッククエリを利用しようとしておりますが、
実際にDBBからクエリを実行したところ、WHERE句に'default'という値を指定すると以下のようなエラーになってしまいます。
Error retrieving data from xxxx.database.windows.net.xxxx.
The underlying error message received was: 'Incorrect syntax near the keyword 'DEFAULT'.'.
※ちなみに、
・DBAからのクエリ実行であればエラーにはなりません。
・DBBからのクエリ実行であっても、WHERE句の値が'default'でなければエラーにはなりません。
どなたか、
同様の症状に行き当たったことがある方や、回避策などをご存じの方はいらっしゃいませんでしょうか?
よろしくお願いいたします。
本件について実行したDDLは以下のとおりです。
■DBA
create table entity_name (
column nvarchar(128) not null,
・・・
・・・
);■DBB
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'xxxx';
CREATE DATABASE SCOPED CREDENTIAL erastic_credential
WITH IDENTITY = 'xxxx',SECRET = 'xxxx';CREATE EXTERNAL DATA SOURCE erastic_data_source WITH
(TYPE = RDBMS,
LOCATION = 'xxxx.database.windows.net',
DATABASE_NAME = 'xxxx',
CREDENTIAL = erastic_credential,
);
column nvarchar(128) not null,
・・・
・・・
) with (DATA_SOURCE = erastic_data_source);※DBB上で実行するクエリ
select * from entity_name where column = 'default';
すべての返信
-
ohigetanuさん、こんにちは。フォーラムオペレーターのクモです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
ご質問によると、これは「デフォルト値」に関連していないと思うので、
別の値を変更して、同じエラーが発生するかどうかをご確認ください。
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
-
クモさん、ご回答ありがとうございます。
①
以下のSQLを、
select * from entity_name where column = 'default';
■DBBで実行(エラスティッククエリ)
・エラーになります。
■DBAで実行(データソース側なので普通のクエリ)
・エラーにはなりません。
②
以下のSQLを、
select * from entity_name where column = 'aaaaa';
■DBBで実行(エラスティッククエリ)
・エラーになりません。
■DBAで実行(データソース側なので普通のクエリ)
・エラーにはなりません。
※エラスティッククエリで外部テーブルにアクセスする場合は、
どのテーブルのどのカラムに対しても、'default'というワードをWHERE句に指定するとエラーになります。
※'update'や'with'や'group'なども試してみましたが、エラーにはなりませんでしたので、
予約語だからダメっていうことではないのかなと思っています。
-
簡単に現象が再現しますね。 WHERE条件が'default'の場合、以下のようにクエリが書き換えられて実行されていました。
問題は、" WHERE ([T2_1].[col1] = DEFAULT)) AS T1_1" の部分で、このクエリの書き方では、Syntaxエラーが発生しますね。
製品側の不具合(考慮不足)のような感じがします。条件句に'default'という条件でElastic Queryを実行する必要がある場合は、マイクロソフトのサポートにお問い合わせしてみるとよいかもしれません。
# WHERE条件が'default'の場合
---
SELECT [T1_1].[col1] AS [col1]
FROM (SELECT [T2_1].[col1] AS [col1]
FROM [dbo].[tab1] AS T2_1
WHERE ([T2_1].[col1] = DEFAULT)) AS T1_1 <-- ここが問題
---
# WHERE条件が'grop'の場合
---
SELECT [T1_1].[col1] AS [col1]
FROM (SELECT [T2_1].[col1] AS [col1]
FROM [dbo].[tab1] AS T2_1
WHERE ([T2_1].[col1] = CAST (N'grop' COLLATE Japanese_CI_AS AS NVARCHAR (4000)) COLLATE Japanese_CI_AS)) AS T1_1
--- -