0
如何根據sql server 2008R2中的條件分配多個變量?我可以通過爲每個變量分別訪問表來完成,但我想在一個語句中完成。以下是我在單個語句中編寫的代碼,但CASE表達式只返回單個值。如何在單個sql語句中基於條件分配多個變量
SELECT
@Sun_ST = CASE WHEN (isnull(@Sun_ShiftCode,'') <> '') AND Std.Shift_Code = @Sun_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.Start_Hour))) + convert(varchar,Std.Start_Hour) + replicate('0',2-len(convert(varchar,Std.Start_Minute))) + convert(varchar,Std.Start_Minute) END,
@Sun_ET = CASE WHEN (isnull(@Sun_ShiftCode,'') <> '') AND Std.Shift_Code = @Sun_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.End_Hour))) + convert(varchar,Std.End_Hour) + replicate('0',2-len(convert(varchar,Std.End_Minute))) + convert(varchar,Std.End_Minute) END,
@Mon_ST = CASE WHEN (isnull(@Mon_ShiftCode,'') <> '') AND Std.Shift_Code = @Mon_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.Start_Hour))) + convert(varchar,Std.Start_Hour) + replicate('0',2-len(convert(varchar,Std.Start_Minute))) + convert(varchar,Std.Start_Minute)END,
@Mon_ET = CASE WHEN (isnull(@Mon_ShiftCode,'') <> '') AND Std.Shift_Code = @Mon_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.End_Hour))) + convert(varchar,Std.End_Hour) + replicate('0',2-len(convert(varchar,Std.End_Minute))) + convert(varchar,Std.End_Minute) END,
@Tue_ST = CASE WHEN (isnull(@Tue_ShiftCode,'') <> '') AND Std.Shift_Code = @Tue_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.Start_Hour))) + convert(varchar,Std.Start_Hour) + replicate('0',2-len(convert(varchar,Std.Start_Minute))) + convert(varchar,Std.Start_Minute) END,
@Tue_ET = CASE WHEN (isnull(@Tue_ShiftCode,'') <> '') AND Std.Shift_Code = @Tue_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.End_Hour))) + convert(varchar,Std.End_Hour) + replicate('0',2-len(convert(varchar,Std.End_Minute))) + convert(varchar,Std.End_Minute) END,
@Wed_ST = CASE WHEN (isnull(@Wed_ShiftCode,'') <> '') AND Std.Shift_Code = @Wed_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.Start_Hour))) + convert(varchar,Std.Start_Hour) + replicate('0',2-len(convert(varchar,Std.Start_Minute))) + convert(varchar,Std.Start_Minute) END,
@Wed_ET = CASE WHEN (isnull(@Wed_ShiftCode,'') <> '') AND Std.Shift_Code = @Wed_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.End_Hour))) + convert(varchar,Std.End_Hour) + replicate('0',2-len(convert(varchar,Std.End_Minute))) + convert(varchar,Std.End_Minute)END,
@Thu_ST = CASE WHEN (isnull(@Thu_ShiftCode,'') <> '') AND Std.Shift_Code = @Thu_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.Start_Hour))) + convert(varchar,Std.Start_Hour) + replicate('0',2-len(convert(varchar,Std.Start_Minute))) + convert(varchar,Std.Start_Minute) END,
@Thu_ET = CASE WHEN (isnull(@Thu_ShiftCode,'') <> '') AND Std.Shift_Code = @Thu_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.End_Hour))) + convert(varchar,Std.End_Hour) + replicate('0',2-len(convert(varchar,Std.End_Minute))) + convert(varchar,Std.End_Minute) END,
@Fri_ST = CASE WHEN (isnull(@Fri_ShiftCode,'') <> '') AND Std.Shift_Code = @Fri_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.Start_Hour))) + convert(varchar,Std.Start_Hour) + replicate('0',2-len(convert(varchar,Std.Start_Minute))) + convert(varchar,Std.Start_Minute) END,
@Fri_ET = CASE WHEN (isnull(@Fri_ShiftCode,'') <> '') AND Std.Shift_Code = @Fri_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.End_Hour))) + convert(varchar,Std.End_Hour) + replicate('0',2-len(convert(varchar,Std.End_Minute))) + convert(varchar,Std.End_Minute) END,
@Sat_ST = CASE WHEN (isnull(@Sat_ShiftCode,'') <> '') AND Std.Shift_Code = @Sat_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.Start_Hour))) + convert(varchar,Std.Start_Hour) + replicate('0',2-len(convert(varchar,Std.Start_Minute))) + convert(varchar,Std.Start_Minute) END,
@Sat_ET = CASE WHEN (isnull(@Sat_ShiftCode,'') <> '') AND Std.Shift_Code = @Sat_ShiftCode THEN replicate('0',2-len(convert(varchar,Std.End_Hour))) + convert(varchar,Std.End_Hour) + replicate('0',2-len(convert(varchar,Std.End_Minute))) + convert(varchar,Std.End_Minute) END
FROM dbo.Table Std
WHERE Std.Country_Code = @Country_Code
目前還不清楚你想達到什麼目的。在你的查詢中,你正在分配多個變量。請提供預期結果 –
您只能對每個案例進行一次分配(每個WHEN語句一個表達式)。您必須將您的條件移至WHERE語句。 – SAS