Chèn giá trị mặc định của bạn thành một biến bảng, sau đó cập nhật hàng duy nhất của tableVar này với một trận đấu từ bảng thực tế của bạn. Nếu tìm thấy hàng, tableVar sẽ được cập nhật; nếu không, giá trị mặc định vẫn còn. Trả về biến bảng.
---=== The table & its data
CREATE TABLE dbo.Rates (
PkId int,
name varchar(10),
rate decimal(10,2)
)
INSERT INTO dbo.Rates(PkId, name, rate) VALUES (1, 'Schedule 1', 0.1)
INSERT INTO dbo.Rates(PkId, name, rate) VALUES (2, 'Schedule 2', 0.2)
Dưới đây là giải pháp:
---=== The solution
CREATE PROCEDURE dbo.GetRate
@PkId int
AS
BEGIN
DECLARE @tempTable TABLE (
PkId int,
name varchar(10),
rate decimal(10,2)
)
--- [1] Insert default values into @tempTable. PkId=0 is dummy value
INSERT INTO @tempTable(PkId, name, rate) VALUES (0, 'DEFAULT', 0.00)
--- [2] Update the single row in @tempTable with the actual value.
--- This only happens if a match is found
UPDATE @tempTable
SET t.PkId=x.PkId, t.name=x.name, t.rate = x.rate
FROM @tempTable t INNER JOIN dbo.Rates x
ON t.PkId = 0
WHERE x.PkId = @PkId
SELECT * FROM @tempTable
END
Kiểm tra mã:
máy chủ
EXEC dbo.GetRate @PkId=1 --- returns values for PkId=1
EXEC dbo.GetRate @PkId=12314 --- returns default values
Nguồn
2016-05-26 08:03:00
cơ sở dữ liệu gì bạn đang sử dụng, SQL Server, Oracle, MySQL? – duckworth
Nếu bạn đang sử dụng SQL Server, tại sao chấp nhận câu trả lời chỉ hoạt động trên Oracle? –