[解決済み] 名前が有効な識別子でないため、実行に失敗しましたか?
2022-02-09 03:41:17
質問
ダイナミッククエリとして実行し、意味のあるカラム名を出力する必要があるクエリがあります。例として、私が直接クエリを実行した場合、それは正しくデータを返します。しかし、以下のコードを使用すると、それが表示されます。
The name '
SELECT (CASE WHEN A.Domain IS NOT NULL THEN A.Domain ELSE B.Domain END) AS [Domain],
(CASE WHEN A.Email IS NOT NULL THEN A.Email ELSE B.Email END) AS [Email],
A.[Sender Size] AS [Sender Size 1], A.[Sender Count] AS [Sender Count 1],
A.[Receiver Size] AS [Receiver Size 1], A.[Receiver Count] AS [Receiver Count 1],
A.[Sender Size 2] AS [Sender Size 2], A.[Sender Count 2] AS [Sender Count 2],
A.[Receiver Size 2] AS [Receiver Size 2], A.[Receiver Count 2] AS [Receiver Count 2],
B.SenderSize AS [Sender Size Average], B.SenderCount AS [Sender Count Average],
B.ReceiverSize AS [Receiv' is not a valid identifier.
その下にあるのがコードです。
DECLARE @query NVARCHAR(4000)
SET @query = N'SELECT *
FROM
(
SELECT (CASE WHEN A.Domain IS NOT NULL THEN A.Domain ELSE B.Domain END) AS [Domain],
(CASE WHEN A.Email IS NOT NULL THEN A.Email ELSE B.Email END) AS [Email],
A.[Sender Size] AS [Sender Size 1], A.[Sender Count] AS [Sender Count 1],
A.[Receiver Size] AS [Receiver Size 1], A.[Receiver Count] AS [Receiver Count 1],
A.[Sender Size 2] AS [Sender Size 2], A.[Sender Count 2] AS [Sender Count 2],
A.[Receiver Size 2] AS [Receiver Size 2], A.[Receiver Count 2] AS [Receiver Count 2],
B.SenderSize AS [Sender Size Average], B.SenderCount AS [Sender Count Average],
B.ReceiverSize AS [Receiver Size Average], B.ReceiverCount AS [Receiver Count Average]
FROM
(
SELECT (CASE WHEN tf.Domain IS NOT NULL THEN tf.Domain ELSE tf2.Domain END) AS Domain,
(CASE WHEN tf.Email IS NOT NULL THEN tf.Email ELSE tf2.Email END) AS Email,
ISNULL(tf.SenderSize,0) AS [Sender Size] , ISNULL(tf.SenderCount,0) AS [Sender Count], ISNULL(tf.ReceiverSize,0) AS [Receiver Size], ISNULL(tf.ReceiverCount,0) AS [Receiver Count],
ISNULL(tf2.SenderSize,0) AS [Sender Size 2], ISNULL(tf2.SenderCount,0) AS [Sender Count 2], ISNULL(tf2.ReceiverSize,0) AS [Receiver Size 2], ISNULL(tf2.ReceiverCount,0) AS [Receiver Count 2]
FROM #TrafficFinal tf FULL JOIN #TrafficFinal2 tf2 ON (tf.Email = tf2.Email AND tf.Domain = tf2.Domain)
) A FULL JOIN #TrafficFinal3 B ON (A.Email = B.Email AND A.Domain = B.Domain)
) C
ORDER BY Domain, Email';
PRINT @query;
-- run it
exec @query;
フルジョインのせいでしょうか?
解決方法は?
最後に代わりにこれを試してみてください。
exec (@query)
括弧がない場合、SQL Server は変数の値をストアドプロシージャ名と見なします。
または
EXECUTE sp_executesql @query
そして、それはFULL JOINのためであってはなりません。
しかし、すでにテンポラリテーブルが作成されていることを望みます。#TrafficFinal、#TrafficFinal2、#TrafficFinal3は、この前にすでに作成されていることを望みます。
EXEC と sp_executesql の使用には、パフォーマンス上の配慮が必要であることに注意してください。なぜなら、sp_executesql は sp のような強制ステートメントキャッシングを使用するからです。
詳細はこちら
こちら
.
もう一つ、クエリ操作をせずそのまま実行することを考えると、クエリをそのまま使えるのに、このケースで動的SQLを使用している理由はあるのでしょうか?
関連
-
[解決済み】 "指定された集約関数を含まないクエリを実行しようとしました。"
-
[解決済み】集約関数のないTSQLピボット
-
[解決済み】SQL ServerでIdentityカラムを更新する方法は?
-
[解決済み] アンピボットの主キーを含む対象コードページで、テキストが切り捨てられたか、1つ以上の文字が一致しない。
-
[解決済み] pg_restoreです。[archiver] 入力ファイルはテキスト形式のダンプであるように見えます。psql を使用してください。
-
[解決済み] ORA-01790: 式は、対応する式と同じデータ型でなければならないエラーが発生するケース
-
[解決済み] DELETE文の競合REFERENCE制約
-
[解決済み] ORA-01779: キーが保存されていないテーブルにマップされる列を変更できません。
-
[解決済み] ORA-01735: 無効な ALTER TABLE オプション - ヒキガエル
-
[解決済み] PLS-00428: この SELECT 文では INTO 句が必要です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】''付近の構文が正しくない
-
[解決済み】CREATE VIEW は、バッチ内の唯一のステートメントでなければなりません。
-
[解決済み】SQLが単一グループのグループ関数でないこと
-
[解決済み】SQL Server: 無効なカラム名
-
[解決済み】単一のクエリで加重平均を計算する
-
[解決済み] ORA-12801: 並列クエリサーバー P004 および ORA-01555 でシグナルされたエラー: スナップショットが古すぎる。
-
[解決済み] SQL Server - INNER JOIN WITH DISTINCT
-
[解決済み] SQLiteでどのようにピボットするか、つまり、長い形式で保存されたテーブルを広い形式で選択するか?
-
[解決済み] VBA - ADODB.CommandTextの実行
-
[解決済み] SQLで複数のGROUP BYを使用する場合とは?