我正在尝试使用SQL中的DATETIME
从另一个表中获取信息。我一直试图弄清楚爆破的FUNCTION如何工作,它的语法现在是2个小时。所以你可以说我的语言或语法不是很多或很流畅。
请你帮我发现我的错误并纠正我,非常感谢。这是代码:
CREATE FUNCTION dbo.PetFunction (@PETVAT int)
RETURNS INT
AS
BEGIN
DECLARE @VATID int
SET @VATID = 0
SELECT @VATID = [ID](*Invalid column name 'ID'*.)
FROM dbo.VAT(*Invalid object name*.)
WHERE VATBeginDate(*Invalid Column name*.) > DATETIME(*Invalid column name*.)
AND VATEndDate(*Invalid column name*.) < DATETIME(*Invalid column name*.) =(*Incorrect syntax newr '='*) @PETVAT
RETURN @VATID
END
我在抛出这些错误的单词旁边标记了错误消息,并在Italic中标记了它。我只有2个表是dbo.PETS和dbo.VAT。
PETS专栏:
PetType, Stock, Sold, VATID, SoldPrice,
PurchaseDateSupplier, SoldDateClient and SalesPerson.
增值税栏:
VATBeginDate VATEnddate and VAT
所以这里有每个表格中的每一个都有一行数据:
dbo.PETS:
+----+---------+-------+-------+-------+-----------+----------------------+----------------+-------------+
| ID | PetType | Stock | Sold | VATID | SoldPrice | PurchaseDateSupplier | SoldDateClient | SalerPerson |
+----+---------+-------+-------+-------+-----------+----------------------+----------------+-------------+
| 2 | Cat | 3 | 2 | 1 | 1500.00 | 2018-02-04 | 2018-02-07 | Sammy |
+----+---------+-------+-------+-------+-----------+----------------------+----------------+-------------+
dbo.VAT:
+----+--------------+------------+------+
| ID | VATBeginDate | VATEnddate | VAT |
+----+--------------+------------+------+
| 1 | 2017-01-01 | 2018-01-01 | 0.14 |
+----+--------------+------------+------+
我正在尝试将dbo.VAT
中的ID列值插入dbo.PETS
中的VATID单元格中,因此如果当前日期大于2018-01-01,则应输入ID 2这将是dbo.VAT
表中增值税增加到0.15的新行(由于最近南非的增值税变化,我希望它能够动态地“未来证明”此功能,如果它再次变化您所做的就是将新的增值税插入dbo.VAT
表中,其余的则自动完成,而售出的旧宠物仍然以正确的增值税价格记录在售。
这只是一个小项目,我正在帮助自学一些SQL。
感谢您的帮助。
答案 0 :(得分:0)
我会对你的要求做一些快速的假设。
如果这是真的,那么我就像这样改变你的功能:
DECLARE @ID INT, @Dt DATETIME
SELECT @Dt=SoldDateClient FROM Pets WHERE ID=@PETID
SELECT @ID=ID
FROM VAT
WHERE VATBeginDate >= @Dt
AND VATEndDate <= @Dt
RETURN @ID
仅供参考 - 如果目标是使用此函数填充PETS中的VATID列,那么您可以跳过使用函数,只需使用更新语句。
UPDATE PETS
SET VATID=V.ID
FROM PETS P
INNER JOIN VAT V ON P.SoldDateClient>=V.VATBeginDate
AND P.SoldDateClient<V.VatEndDate
WHERE P.ID=1234
但请注意,VAT表中的任何重叠日期都会导致您遇到问题。因此 - 如果您决定尝试,请确保每增值税日期范围内只有1条记录。
当然 - 任何有疯狂SQL技能的人都会进入并编辑该更新声明以记录多个记录......并且将我的初始答案(取决于他们当时的心情)进行下调。
答案 1 :(得分:0)
抱歉擅离职守。我从来没有弄清楚如何让它工作,所以我放弃了这个并转移到另一个练习项目。我应该会见一个会亲自向我解释这些事情的人,并在不久的将来证明这一点,谢谢大家的帮助和建议,再次抱歉消失。
亲切的问候。