なぜこれがうまくいかないのか誰か教えてもらえますか?
DECLARE
@ItemList VARCHAR(max);
IF EXISTS
(SELECT IM_Data INTO ItemList
FROM IM_DataTable
WHERE xRowNum<=1)
エラー:
検索エラー - SQL Server データベース エラー: キーワード 'INTO' 付近の構文が正しくありません。
なぜこれがうまくいかないのか誰か教えてもらえますか?
DECLARE
@ItemList VARCHAR(max);
IF EXISTS
(SELECT IM_Data INTO ItemList
FROM IM_DataTable
WHERE xRowNum<=1)
エラー:
検索エラー - SQL Server データベース エラー: キーワード 'INTO' 付近の構文が正しくありません。
わかりました。まず、クエリの結果が 1 行だけであることを確認する必要がありWHERE xRowNum<=1
ますxRowNum=1
。
DECLARE @ItemList VARCHAR(max);
SELECT @ItemList = IM_Data
FROM IM_DataTable
WHERE xRowNum = 1
ItemList がテーブルであることを期待していると思います.SELECT INTOは変数ではなくテーブルです。
SQL Server の構文は次のとおりです。
SELECT
ItemList = IM_Data
FROM
IM_DataTable
WHERE
xRowNum<=1
IF EXISTS がそれにどのように適合するかはわかりません。データが存在する場合にのみ変数を設定しますか?
変数名の先頭にある必要がある @ 記号が省略されています。また、存在を確認する構文と、データを変数に取得する構文を混在させているようです。IN_DataTable 内の特定の行または行の存在を確認しようとしていますか? その場合は、「INTO @ItemList」を省略して、次のようにします。
IF EXISTS
(SELECT IM_Data
FROM IN_DataTable
WHERE xRowNum <= 1)
...
IM_Data を取得して後で使用する必要がある場合は、次のようにする必要があります。
DECLARE @ItemList VARCHAR(max);
SELECT @ItemList = IM_Data
FROM IM_DataTable
WHERE xRowNum<=1;
...
なぜこれが機能しないのですか?
さて、あなたが持っているサブクエリは次のとおりです。
SELECT IM_Data
INTO ItemList
FROM IM_DataTable
WHERE xRowNum<=1
ItemList
これは、現在のデータベースにというテーブルを作成するための完全に有効な構文です。ただし、この構文はif
ステートメントでは使用できません。
したがって、これを次のように表現できます。
SELECT IM_Data
INTO ItemList
FROM IM_DataTable
WHERE xRowNum<=1
if exists (select * from itemlist)
または、追加のテーブルを完全に省略することもできます。
if exists (select * from IM_DataTable WHERE xRowNum<=1)
または、まったく別の意図があるかもしれません。