问题已经更新:
我们说我有两张桌子:
表1
ID_Ticket | Ticket_Quantity | Total_Price(Calculated field)
--------------------------------------------
2 | 5 | x
1 | 3 | y
表2
ID_Ticket | Ticket_Price
------------------------
1 | 4.5
2 | 5
我希望阻止数据库用户填写Total_Price字段(通过编辑前200行或查询),而我希望将其计算为Ticket_Price * Ticket_Quantity并自动插入该行。
在这种情况下, x应为25 且 y应为13.5 (一旦Ticket_Quantity和Ticket_Price为自动值,则应自动插入值填写该行)
我写了这样一个函数:
CREATE FUNCTION Multiply(@x DECIMAL(19,4), @y DECIMAL (19,4))
RETURNS DECIMAL(19,4)
AS
BEGIN
SELECT @x * Ticket_Price
FROM Table2
WHERE ID_Ticket = @y
END
但是有一个错误:
函数中包含的Select语句无法将数据返回给客户端
当我想根据功能添加计算字段时:
ALTER TABLE Purchases
ADD Total_Price AS Multiply(Table2.Ticket_Price,Ticket_Quantity);
查询没有执行并给我这个错误:
<登记/>
多部分标识符&#34; Product.Prod_Price&#34;无法受约束。
如何调用表2中的值并修复乘法函数?
答案 0 :(得分:0)
我找到了一个解决方案,所以我会将它发布给有同样问题的未来读者:
在对象资源管理器(左侧面板)中转到此路径:
Databases --> <your_database_name> --> programmability --> functions
右键单击Functions文件夹,然后选择New --> Scalar-valued function
粘贴以下函数脚本(将&lt; variables&gt;替换为与您的数据库对应的那些):
CREATE FUNCTION dbo.Multiply(@id INT, @price DECIMAL(19,4))
--or (@x float, @y money) depending on the type of your columns you have
RETURNS DECIMAL(19,4)
--RETURNS <data_type_of_the_calculated_column_you_want>
AS
BEGIN
RETURN
(SELECT @price * Ticket_Price
--SELECT @<second_argument/column_name_of_Table1>*<column_name_of_Table2>
FROM Table2
--FROM <your_Table2_name>
WHERE ID_Ticket = @id)
--WHERE <unique/PrimaryKey_Column_to_identify_the_row_in_Table2>
-- = @<ForeignKey_Column_to_identify_the_row_in_Table2>
END
执行它。
现在创建一个新查询(Ctrl + N)以在Table1
中添加计算列,并复制粘贴以下查询:
ALTER TABLE Table1
--ALTER TABLE <your_Table1_name>
ADD Total_Price AS dbo.Multiply(ID_Ticket,Ticket_Quantity);
--ADD <name_of_the_calculated_row_you_like> AS
-- dbo.<Function_Name>(<id_column_name_of_Table2>,<column_name_from_Table1>)
执行查询 现在,计算列应该是Table1和Table2
列的乘法