私はStudent
というテーブルを以下のようなレコードを持っています。ユーザーが指定した列名に基づいたクエリ
StudentId int PK NOT Null,
Name Varchar(50),
Age int,
DateofBirth Datetime and
ClassRecordID int NOT NULL
MajorID int NOT NULL
、データは次のようになります。
StudentID Name Age Dateofbirth ClassRecordID MajorID
1234 Sam 21 1/10/1991 1122 1
1235 NULL Null 1/12/1990 1123 2
1236 George Null NULL 1125 2
1237 Fanny NULL NULL 1155 1
私の要件は、ユーザーがcolumnName
とMajorID
を提供するたびに、クエリがいるテーブルからclassRecordID
を返す必要があり、
ですcolumnName
にはnull値または空の値があります。例えば
ユーザがcolumnName = 'Age'
とMajorId = 2
を提供する場合、
は、クエリは、ユーザがcolumnName = 'Dateofbirth'
とMajorId = 2
を提供する場合、クエリは1125
を返すべき
次のクエリを使用して試しました。
Declare @ColumnName nvarchar(50)
Delcare @MajorId int
set @ColumnName = 'age' --for example
set @MajorId = 2 -- For example
SELECT DISTINCT TOP 10
ClassRecordID
FROM
dbo.Student WITH (NOLOCK)
WHERE
(@ColumnName IS NULL
OR LEN(LTRIM(RTRIM(@ColumnName))) = 0)
AND
MajorId = @MajorId
しかし、期待される結果の代わりに空を返します。このクエリで何が問題になっていますか?これを行うための良い方法はありますか?私はIF elseアプローチを使用したくありません。
私はこの解決策を試しましたが、Yuriyのアプローチによって提供される柔軟性は私には提供されません。提案していただきありがとうございます。 – user1072578
ようこそ。動的SQLアプローチを採用する前に、この記事を参照してください。http://www.sommarskog.se/dynamic_sql.htmlそれがあなたの状況に適しているかどうかを判断することができます。 –
確かにロン、私はそれを見ています。 – user1072578