如果我使用普通查询尝试SQL语句,它可以正常工作:
// validating email id
private boolean isValidEmail(String email) {
String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
// validating password with retype password
private boolean isValidPassword(String pass) {
if (pass != null && pass.length() > 6) {
return true;
}
return false;
}
但是它在触发器中不起作用。我可以成功保存触发器但是当我在表中手动插入记录进行测试时,我不断收到错误:
'MonthlyHourRecord'附近的语法不正确
这是我的触发器代码,请看看有什么可能是错误的,谢谢!
UPDATE TraineeMonthlyShopItemListRecord
SET Data01 = 1
WHERE TraineeID = '553'
AND ShopItemListID = '17'
AND RecordID IN (SELECT a.recordid
FROM TraineeMonthlyHourRecord a
JOIN MonthlyHourRecord b ON a.RecordID = b.RecordID
WHERE b.Month = '201609'
AND a.TraineeID = '553'
GROUP BY a.RecordID
HAVING COUNT(*) = 1)
答案 0 :(得分:0)
要评论大,所以我在答案中写下来。
您可以使用此
SELECT TraineeID,
ShopItemListID,
RecordTime,
Quantity,
substring(CONVERT(varchar,@RecordTime, 112),1,4)+substring(CONVERT(varchar,@RecordTime, 112),5,2) as YYYYMM
'Data'+substring(CONVERT(varchar,@RecordTime, 112),7,2) as DataDD
FROM inserted
要与表格连接,您需要更新。
尝试一下:
;WITH cte AS (
SELECT TraineeID,
ShopItemListID,
RecordTime,
Quantity,
substring(CONVERT(varchar,@RecordTime, 112),1,4)+substring(CONVERT(varchar,@RecordTime, 112),5,2) as YYYYMM
'Data'+substring(CONVERT(varchar,@RecordTime, 112),7,2) as DataDD
FROM inserted
)
UPDATE tm
SET Data01 = c.Quantity
FROM TraineeMonthlyShopItemListRecord tm
INNER JOIN cte c
ON c.TraineeID = tm.TraineeID
AND tm.ShopItemListID = c.ShopItemListID
CROSS APPLY (
SELECT a.RecordID
FROM TraineeMonthlyHourRecord a
INNER JOIN MonthlyHourRecord b
ON a.RecordID = b.RecordID
WHERE b.Month = c.YYYYMM
AND a.TraineeID = c.TraineeID
GROUP BY a.RecordID
HAVING COUNT(*) = 1
) a
WHERE a.RecordID = tm.RecordID