【SQL Server】マルチパート識別子****をバインドできませんでした。

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【SQL Server】マルチパート識別子****をバインドできませんでした。

2022-10-13 | ,

SQL Serverで「マルチパート識別子****をバインドできませんでした。」が発生する原因と対策だよ!

概要

今回の記事では、SQL Serverで「マルチパート識別子****をバインドできませんでした。」が発生する原因と対策について掲載する。

仕様書

環境

  • SQL Server 15.0.2095

原因

例として、会社名のテーブルCompany部署名のテーブルDepartment社員の氏名のテーブルEmployeeがあり、Employee->Department->Companyみたいな感じで連結するケースを挙げる。

SELECT
    EmployeeID,
    Name
FROM
    Employee
    JOIN Company ON Department.DepartmentID = Company.CompanyID
    JOIN Department ON Employee.DepartmentID = Department.CompanyID

このクエリを実行すると下記のように出力される。

メッセージ 4104、レベル 16、状態 1、行 6
マルチパート識別子 "Department.DepartmentID" をバインドできませんでした。

原因は、6行目JOIN Company ON Department.DepartmentID = Company.CompanyIDの時点でテーブルDepartmentが定義されておらず、名前解決できないので発生してる。

SQLではJOINの順番が反映されるので、入力する順番を考慮する必要がある。

手順書

6行目と7行目を入れ替え、前もってテーブルDepartmentを定義する。

SELECT
    EmployeeID,
    Name
FROM
    Employee
    JOIN Department ON Employee.DepartmentID = Department.CompanyID
    JOIN Company ON Department.DepartmentID = Company.CompanyID

まとめ(感想文)

分かれば当たり前だとは思うんだけども、JOINは全て同レベルで処理されてるような気もするじゃんないですかあ。(言い訳)