我想创建一个基于其他三列的输入返回一列的函数。由于函数中不允许使用临时表,是否可以从三个输入列中创建一个表变量?
CREATE FUNCTION dbo.convert_value(
@CustomerID VARCHAR(MAX),
@CustomerValue VARCHAR(MAX),
@CustomerDescription VARCHAR(MAX)
)
RETURNS FLOAT
AS BEGIN
DECLARE @CustomerTable TABLE (
UniquePatientUID VARCHAR(MAX),
ResultValue VARCHAR(MAX),
PracticeDescription VARCHAR(MAX)
);
-- How can I insert @UniquePatientUID, @ResultValue and @PracticeDescription into @CustomerTable
END
此问题的上下文是我有一个使用临时表以及许多UPDATE
和ALTER TABLE
语句的SQL脚本,我需要将其转换为函数。该脚本从提到的三列开始,然后添加第四列Converted_Value
,该列由几百行代码和操纵临时表计算得出。这里有希望吗?
答案 0 :(得分:1)
表变量插入实际上与常规插入没有什么不同。不要使用临时表。您也可以更改表,或者只是在第四列开始时声明它,并允许它为NULL。
INSERT INTO @CustomerTable (UniquePatientUID, ResultValue, PracticeDescription)
VALUES(@CustomerID, @CustomerValue, @CustomerDescription);
别忘了返回FLOAT。
答案 1 :(得分:1)
表变量是一个表,因此,您只能使用INSERT INTO ... VALUES....
INSERT INTO @CustomerTable (UniquePatientUID,ResultValue,PracticeDescription )
VALUES
(@UniquePatientUID, @ResultValue , @PracticeDescription)
答案 2 :(得分:1)
除非出于某些特定原因需要,否则为什么不只将这些变量用作派生表表达式?即
;with inputs (UniquePatientUID, ResultValue, PracticeDescription) as
(
select @UniquePatientUID, @ResultValue, @PracticeDescription
)
select *
from inputs
表变量在函数调用后超出范围,并且您也不能将表类型传入或传出函数。因此,实际上,表变量在这里所做的所有事情都是一种保留位置的方法,这种方法对于SQL开发人员来说更为熟悉。但是它们不是免费的,这是我很好奇您的用例的唯一原因。
如果您不需要将它们作为集合或类似形式返回,则也可以直接与变量进行交互。