CREATE PROCEDURE GetVar
@Var VARCHAR(50) OUTPUT
AS
BEGIN
SET @Var = 'This is a Var String!';
SELECT @Var; -- 也可回傳結果集
END
GO
DECLARE @aa VARCHAR(50);
EXEC GetVar @aa OUTPUT; -- 關鍵在這裡!
PRINT @aa; -- 輸出: This is a Var String!
-- 錯誤:忘記 OUTPUT
EXEC GetVar @aa; -- @aa 仍為 NULL
using (var cmd = new SqlCommand("GetVar", conn) { CommandType = CommandType.StoredProcedure })
{
var p = cmd.Parameters.Add("@Var", SqlDbType.VarChar, 50);
p.Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
Console.WriteLine(p.Value); // 取得輸出值
}
CREATE PROC GetStats
@Count INT OUTPUT,
@MaxVal INT OUTPUT
AS
SELECT @Count = COUNT(*), @MaxVal = MAX(col) FROM table1;
GO
DECLARE @c INT, @m INT;
EXEC GetStats @c OUTPUT, @m OUTPUT;
SELECT @c AS TotalCount, @m AS MaxValue;
核心口訣:定義用 OUTPUT,呼叫也要用 OUTPUT,雙邊缺一不可。