[英]Calling a UDF during table creation
我有一個UDF,它會根據進入表中的一系列值來計算分數。
在表創建過程中必須應用/調用UDF,這給我帶來了一些麻煩。
UDF必須僅在使用case方法的情況下創建,因此我不能對此進行太多更改,但是我敢肯定我會有所收獲。
我不確定答案是否已經存在,但是我還沒有偶然發現它,所以如果這已經得到答案,請您道歉。
這是首先創建的UDF
--Create UDF
create function [dbo].[cupidscoreUDF]
(
@gender char(1),
@name varchar(15),
@dob datetime,
@weight int,
@height int,
@smoker bit,
@salary int
)
returns int
as
begin
declare @score int
-- To determine age in years
declare @Age int
select @Age = DATEDIFF(YEAR, @dob, GETDATE())
select
@score = case
when @Age between 20 and 30 then 5
when @Age between 31 and 40 then 4
when @Age between 41 and 50 then 3
when @Age > 50 then 2
else 0
end
-- To determine the height/weight ratio
declare @WeightHeight int
set @WeightHeight = @weight / @height
set
@score = @score +
case
when @WeightHeight between 20 and 25 then 1
when @WeightHeight between 25 and 30 then 3
when @WeightHeight between 30 and 35 then 4
when @WeightHeight between 35 and 40 then 2
else 0
end
-- If non-smoker add 2 points
if @smoker = 0
set @Score = @Score + 2
-- To determine score by salary
set
@score = @score +
case
when @salary < 50000 then 1
when @salary between 500001 and 60000 then 2
when @salary between 60001 and 70000 then 3
when @salary > 70000 then 4
end
return @score
end
;
現在這是表創建過程的全部內容
-- Create Member_Profile table
create table Member_Profile
(
MemberID int primary key,
Gender varchar(6),
Name varchar(50),
Dob datetime,
Weight int,
Height int,
Smoker bit,
Salary int,
Cupid as dbo.cupidscoreUDF
)
GO
insert into Member_Profile (Gender, Name, Dob, Weight, Height, Smoker, Salary) values ('Male','James',19931115, 75, 180, 0, 80000);
insert into Member_Profile (Gender, Name, Dob, Weight, Height, Smoker, Salary) values ('Female','Rosie',19870912, 45, 150, 0, 100000);
insert into Member_Profile (Gender, Name, Dob, Weight, Height, Smoker, Salary) values ('Male','Richard',19630402, 95, 168, 1, 200000);
select * from Member_Profile
UDF獲取成員的信息,然后根據該信息計算其“丘比特”得分,然后將其與其他所有信息一起插入表中。
使用UDF的任何幫助都會很棒
嘗試將其用於丘比特列:
Cupid as dbo.cupidscoreUDF(Gender, Name, Dob, Weight, Height, Smoker, Salary)
我會非常認真地建議將UDF的調用移至插入/更新而不是表定義。 為了使此操作更容易,您可以制作一個簡單的過程來插入/更新調用UDF的過程。 這樣,您就不必兩次提供數據。
這是一個非常普通的示例,在此示例中,對於如此簡單但在應用實際方案時會迅速改變的步驟執行所有額外步驟顯得有些奇怪。
use demo
go
create table dbo.example_table (
id int identity(1,1) primary key,
some_value_1 int,
some_value_2 int,
some_calculation int)
go
create function dbo.calculator_function (
@value1 int,
@value2 int)
returns int
as
begin
declare @result int = (select @value1 + @value2 as result)
return @result
end
go
create procedure dbo.insert_example
@value1 int,
@value2 int
as
insert dbo.example_table (some_value_1,some_value_2,some_calculation)
select @value1, @value2, dbo.calculator_function(@value1,@value2)
go
exec dbo.insert_example 1,2
go
select * from example_table
我假設您在VUW,並且假設您像我一樣在做341。 使用觸發器調用您的UDF-我已經給您足夠的入門知識,您將需要聲明並設置您認為對其起作用所需的任何變量
CREATE TRIGGER [dbo].[CalculateCupid]
ON [dbo].[Member_Profile]
AFTER INSERT
AS
BEGIN
UPDATE DBO.Member_Profile
SET Cupid_Score = @Cupid_Score WHERE MemberID=@MemberID
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.