combobox
を使用してdatagridview
でフィルタを作成しようとしました。 私がしたかったのは、datagridview
のフィルタリングされたデータをフィルタリングすることでした。 私は7つの濾過のためにcomboboxes
を持っています。たとえば、最初のcombobox
が今年の場合は、検索をグレードレベル、次にセクションなどにフィルタリングしたいと考えています。したがって、ユーザーはデータベースからの検索をソートまたはフィルタリングできます。SQL Serverから年齢をフィルタする方法
これまでのストアドプロシージャコードをコンボボックスで試しました。データベースから保存せずに自動的に年齢を計算するように年齢を除いてクエリを設定しましたが、今では年齢をフィルタリングすることが問題になります。
私はこの方法でストアドプロシージャを実行しました。
ALTER PROCEDURE [dbo].[uspYearGradeFilter]
@Year Nvarchar(20) = NULL,
@Grade Nvarchar(20) = NULL,
@Section Nvarchar(20) = NUll,
@Gender Nvarchar(20) = NULL,
@Status Nvarchar(20) = NULL,
@Status2 Nvarchar(20) = NULL,
@Age Nvarchar(20) = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT
si.StudentID, SI.Surname, SI.FirstName, SI.MiddleName,
si.Gender, si.BirthDay, SI.TelNum,
Birthday, getdate() AS [Today],
Datediff(yy, BirthDay, getdate()) -
CASE
WHEN DATEADD(YY, DATEDIFF(YY, BirthDay, getdate()), BirthDay) > GETDATE()
THEN 1
ELSE 0
END AS [age]
FROM
StudentInformation SI
JOIN
StudentHistory SH ON SI.StudentID = SH.StudentID
WHERE
sh.SchoolYear LIKE COALESCE('%'+ @Year+'%', sh.SchoolYear)
AND sh.Levels LIKE COALESCE('%' + @Grade + '%', sh.Levels)
AND SI.Gender LIKE COALESCE('%' + @Gender + '%', si.gender)
AND SH.Section LIKE COALESCE('%' + @Section + '%', sh.Section)
AND Si.Status LIKE COALESCE('%' + @Status + '%', si.status)
AND Sh.Status2 LIKE COALESCE(@Status2 + '%', sh.status2)
AND [Age] LIKE COALESCE('%' + @Age + '%', [Age])
END
しかし、私はエラーを取得する:
Msg 207, Level 16, State 1, Procedure uspYearGradeFilter, Line 42
Invalid column name 'Age'
誰かがこれを解決するために私を助けてくださいことはできますか?ありがとう
サイドノート:**なぜ私は '@年 'のような' nvarchar(20) 'を使っていますか?数値? *最も適切な*データ型を常に使用してください - 数字の型、日付と時刻の型の型を使用してください。 –
@marc_s - 現代的なスタイルは、すべての変数が文字列として宣言されていて、それが使用されるときはいつでも '.ToString()'を持っていますか? – Hogan