Reputation: 55
I want to Update table TblNames
if the name = @name
exists update the columns comparing with existing row data.
Table (TblNames)
id | name | val1 | val2 | val3
1 | name1 | 10 | 12 | 13
2 | name2 | 11 | 13 | 15
3 | name3 | 15 | 12 | 11
4 | name4 | 10 | 12 | 13
parameters @name, @val1, @val2, @val3
If name
exists select row and
compare val1
with @val1
parameter
if val1 < @val1
then @val1 = val1
else val1 = @val1
compare val2
with @val2
parameter
if val2 > @val2
then @val2 = val2
else val2 = @val2
Average of val3
and @val3
parameter
( val3 + @val3 ) / 2
Finally
Update TblNames set val1 = @val1, val2 = @val2, val3 = @val3 Where name = @name
Upvotes: 0
Views: 1175
Reputation: 1123
Please try below query to create procedure for your problem...
CREATE PROC dbo.Name_Calculation_value (
DECLARE @name VARCHAR(20) = NULL
,@val1 INT = NULL
,@val2 INT = NULL
,@val3 INT = NULL
)
BEGIN
AS
IF EXIST(SELECT COUNT(*) FROM dbo.TblNames) > 0
BEGIN
UPDATE dbo.TblNames
SET val1 = CASE
WHEN val1 < @val1
THEN @val1
ELSE val1
END
,val2 = CASE
WHEN val2 <= @val2
THEN @val2
ELSE val2
END
,val3 = (val3 + @val3) / 2
WHERE name = @name;
END
Upvotes: 1
Reputation: 82474
Use IIF
:
UPDATE TblNames
SET val1 = IIF(val1 < @val1, @val1, val1),
val2 = IIF(val2 > @val2, @val2, val2),
val3 = (val3 + @val3) / 2
OUTPUT inserted.Val1, inserted.Val2, inserted.Val3
WHERE name = @name
Upvotes: 0
Reputation: 37472
You can use CASE
expressions for val1
and val2
and just the arithmetic expression for val3
.
UPDATE tblnames
SET val1 = CASE
WHEN val1 >= @val1 THEN
@val1
ELSE
val1
END,
val2 = CASE
WHEN val2 <= @val2 THEN
@val2
ELSE
val2
END,
val3 = (val3 + @val3) / 2
WHERE name = @name;
Upvotes: 1