問題是:
創建一個程序 GetOrderDetails,它將 OrderID 作為輸入引數并回傳該 OrderID 的所有記錄。如果在 Order Details 表中沒有找到記錄,那么它應該列印一行:“The OrderID XXXX does not exits”,其中 XXX 應該是用戶輸入的 OrderID,程序應該回傳值 1。
我的解決方案:
ALTER PROC GetOrderDetails
@InputOrderID int
AS
BEGIN
SELECT CASE
WHEN SalesOrderID != @InputOrderID
THEN 'The OrderID ' CONVERT(VARCHAR,@InputOrderID) ' does not exists'
ELSE SalesOrderID
END
FROM SalesLT.SalesOrderDetail
END
EXEC GetOrderDetails 71770
uj5u.com熱心網友回復:
SQL Server 具體方式:
在 SQL Server 中,您可以選擇資料并使用@@ROWCOUNT檢查選擇了多少記錄。您還可以使用 PRINT 陳述句列印錯誤訊息(它不會成為結果集的一部分)。
ALTER PROCEDURE GetOrderDetails
@InputOrderID int
AS
BEGIN
DECLARE @SelectedRowCount INT;
SELECT
* /* Don't use * in production code, list all, but only the required columns! This is just for demonstration purposes */
FROM
SalesLT.SalesOrderDetail
WHERE
SalesOrderID = @InputOrderID
;
SELECT @SelectedRowCount = @@ROWCOUNT;
IF (@SelectedRowCount = 0)
BEGIN
PRINT 'Not found';
RETURN 1; /*Return with an error code*/
END;
RETURN 0; /* Return with no error */
END;
EXEC GetOrderDetails 71770;
在其他產品中,您可能需要檢查是否至少有一條記錄滿足您的 where 條件,這可以通過COUNT在單獨的查詢中選擇結果EXISTS或使用更復雜和奇特的方式進行檢查來完成,例如選擇進入臨時表,然后計算所述臨時表中的記錄,然后決定輸出資料或列印訊息。
uj5u.com熱心網友回復:
只需ROWCOUNT在緊隨其后的行上使用以檢查是否有任何記錄。
CREATE OR ALTER PROC GetOrderDetails
@InputOrderID int
AS
SET NOCOUNT ON;
SELECT od.SalesOrderID
FROM SalesLT.SalesOrderDetail od
WHERE od.SalesOrderID == @InputOrderID;
IF (@@ROWCOUNT = 0)
BEGIN
SELECT CONCAT('The OrderID ', @InputOrderID, ' does not exists');
RETURN 1;
END;
GO
EXEC GetOrderDetails 71770
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325112.html
標籤:sql sql-server 查询语句 存储过程
上一篇:SQL查詢從一個到多個表回傳結果
下一篇:如何添加參考不同表的約束
