我在内部插入附近有语法问题。
错误消息:
' INSERT'附近的语法不正确
(并在评论部分中标记)。有没有人知道在case语句中插入表的方法,然后选择范围标识?
INSERT
INTO dbo.WorkOrderMasterLabor ( WorkOrderMasterID , TaskID , ContractorLaborCraftID , EmployeeLaborCraftID , Sequence , ModifiedTimestamp , ModifiedUserName )
SELECT
(SELECT WorkOrderMasterID FROM WorkOrderMasters WHERE JobNumber = A.JOBNO),
NULL,
NULL,
CASE WHEN EXISTS(
SELECT 1
FROM dbo.EmployeeLaborCrafts
WHERE EmployeeID = (
SELECT EmployeeID
FROM Employees
WHERE EmployeeNumber = A.EMPLOYEENO
)
AND LaborCraftID = (
SELECT LaborCraftID
FROM LaborCrafts
WHERE LaborCraftCode = A.LABORCODE
)
)
THEN (
SELECT EmployeeLaborCraftID
FROM dbo.EmployeeLaborCrafts
WHERE EmployeeID = (
SELECT EmployeeID
FROM Employees
WHERE EmployeeNumber = A.EMPLOYEENO
)
AND LaborCraftID = (
SELECT LaborCraftID
FROM LaborCrafts
WHERE LaborCraftCode = A.LABORCODE
)
)
ELSE (
--syntax error at insert
INSERT
INTO dbo.EmployeeLaborCrafts ( EmployeeID , LaborCraftID , ModifiedTimestamp , ModifiedUserName )
SELECT *
FROM @PMMLABOR
SELECT SCOPE_IDENTITY()
)
END,
'',
GETDATE(),
N'Administrator'
FROM @PMMLABOR A
答案 0 :(得分:0)
这是一个重写版本,它只会在符合你的情况时插入值:
INSERT
INTO dbo.WorkOrderMasterLabor ( WorkOrderMasterID , TaskID , ContractorLaborCraftID , EmployeeLaborCraftID , Sequence , ModifiedTimestamp , ModifiedUserName )
SELECT
(SELECT WorkOrderMasterID FROM WorkOrderMasters WHERE JobNumber = A.JOBNO),
NULL,
NULL,
(
SELECT EmployeeLaborCraftID
FROM dbo.EmployeeLaborCrafts
WHERE EmployeeID = (
SELECT EmployeeID
FROM Employees
WHERE EmployeeNumber = A.EMPLOYEENO
)
AND LaborCraftID = (
SELECT LaborCraftID
FROM LaborCrafts
WHERE LaborCraftCode = A.LABORCODE
)
),
'',
GETDATE(),
N'Administrator'
FROM @PMMLABOR A
where EXISTS(
SELECT 1
FROM dbo.EmployeeLaborCrafts
WHERE EmployeeID = (
SELECT EmployeeID
FROM Employees
WHERE EmployeeNumber = A.EMPLOYEENO
)
AND LaborCraftID = (
SELECT LaborCraftID
FROM LaborCrafts
WHERE LaborCraftCode = A.LABORCODE
)
)
您可以运行同一个select语句,执行NOT EXISTS
代替查找失败的语句,然后根据该结果引发异常。