如何根据相同的行字段自动完成 SQL 字段
How to autocomplete SQL field based on same row fields
问题已更新:
假设我有两个表:
Table1
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函数中包含的语句不能return data to a client
另外当我想添加基于函数的计算字段时:
ALTER TABLE Purchases
ADD Total_Price AS Multiply(Table2.Ticket_Price,Ticket_Quantity);
查询不执行并给我这个错误:
无法绑定多部分标识符 "Product.Prod_Price"。
我应该如何调用 Table2 中的值并修复 Multiply 函数?
我找到了解决方案,所以我会 post 为以后遇到同样问题的读者提供:
在对象资源管理器(左面板)中转到此路径:
Databases --> <your_database_name> --> programmability --> functions
Right-click 在 Functions 文件夹和 select New --> Scalar-valued function
粘贴以下函数脚本(将 <变量> 替换为与您的数据库相对应的变量):
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
中添加计算列,并且 copy-paste 以下查询:
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 的列的乘积
问题已更新:
假设我有两个表:
Table1
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函数中包含的语句不能return data to a client
另外当我想添加基于函数的计算字段时:ALTER TABLE Purchases
ADD Total_Price AS Multiply(Table2.Ticket_Price,Ticket_Quantity);
查询不执行并给我这个错误:
无法绑定多部分标识符 "Product.Prod_Price"。
我应该如何调用 Table2 中的值并修复 Multiply 函数?
我找到了解决方案,所以我会 post 为以后遇到同样问题的读者提供:
在对象资源管理器(左面板)中转到此路径:
Databases --> <your_database_name> --> programmability --> functions
Right-click 在 Functions 文件夹和 select New --> Scalar-valued function
粘贴以下函数脚本(将 <变量> 替换为与您的数据库相对应的变量):
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
中添加计算列,并且 copy-paste 以下查询:
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 的列的乘积