我正在使用 C# 和 SQL Server 資料庫開發一個專案。現在我必須撰寫一個存盤程序,它需要從 3 個不同的列中獲取 MAX 值。
我的代碼如下所示:
CREATE PROCEDURE [dbo].[sp_GetClass]
@surname nvarchar(50),
@maxClass int OUT
AS
SELECT @maxClass = MAX
FROM (VALUES (Programming), (Mathematics), (Physics))
FROM MissLess
WHERE Surname LIKE '%' @surname '%'
GO
我得到第二個錯誤,FROM我不知道如何解決它。
這個想法是讓它在輸入姓氏時從這些列中獲得最大值。當沒有輸入時(按回車鍵),它只顯示所有姓氏的這 3 列中的最大值。
對不起,如果格式或問題沒有問對,這是我在這里的第一篇文章。
編輯:在@name 中出錯,它應該是@surname;和名稱應該是姓氏。編輯最終版:感謝您的大力幫助。我是這一切的超級新手,但這一切似乎都很有趣。非常接近放棄,但決定試一試。感謝所有的答案!!!
uj5u.com熱心網友回復:
您需要將所選行的這三個值放入存盤程序中的表變數中,以便能夠將 應用于MAX它們。
嘗試這樣的事情 - 我不知道這些值是什么資料型別- 只是INT在這里假設,根據需要進行調整:
CREATE PROCEDURE [dbo].[GetMaxValue]
@surname NVARCHAR(50),
@maxClass INT OUTPUT
AS
DECLARE @IntTbl TABLE (AValue INT);
INSERT INTO @IntTbl (AValue)
SELECT Programming
FROM MissLess
WHERE Name LIKE '%' @name '%'
UNION ALL
SELECT Mathematics
FROM MissLess
WHERE Name LIKE '%' @name '%'
UNION ALL
SELECT Physics
FROM MissLess
WHERE Name LIKE '%' @name '%';
SELECT @maxClass = MAX(AValue)
FROM @IntTbl;
GO
更新- 好的,你要求它;-)
由于您的搜索條件可能匹配多行(至少您可能不能完全排除這一點),因此您必須首先MAX()根據搜索條件獲取每一列的 :
CREATE PROCEDURE [dbo].[GetMaxValue]
@surname NVARCHAR(50),
@maxClass INT OUTPUT
AS
DECLARE @MaxMath INT, @MaxPhys INT, @MaxProgr INT;
SELECT
@MaxMath = MAX(Mathematics),
@MaxPhys = MAX(Physics),
@MaxProgr = MAX(Programming)
FROM
MissLess
WHERE
Name LIKE '%' @name '%';
IF @MaxMath > @MaxPhys
BEGIN
IF @MaxMath > @MaxProgr
-- @MaxMath is bigger than both @MaxPhys AND @MaxProgr --> it's the overall MAX()
SET @maxClass = @MaxMath;
ELSE
-- @MaxMath is bigger than @MaxPhys, but smaller than @MaxProgr
SET @maxClass = @MaxProgr;
END
ELSE BEGIN
IF @MaxPhys > @MaxProgr
-- @MaxPhys is bigger than both @MaxMath AND @MaxProgr --> it's the overall MAX()
SET @maxClass = @MaxPhys;
ELSE
-- @MaxPhys is bigger than @MaxMath, but smaller than @MaxProgr
SET @maxClass = @MaxProgr;
END;
SELECT @maxClass = MAX(AValue)
FROM @IntTbl;
GO
uj5u.com熱心網友回復:
你可以做(小提琴)
SELECT MAX(s)
FROM MissLess
CROSS APPLY (VALUES (Programming), (Mathematics), (Physics)) V(s)
WHERE Name LIKE '%' @name '%'
如果@name謂詞匹配多行,您將不會知道它來自哪一行
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/358332.html
標籤:C# sql-server
