PDA

View Full Version : میشه توی Delete هم inner join داشت؟



az.heidarzadeh
یک شنبه 27 آذر 1390, 09:27 صبح
سلام
من لازم دارم delete جدولم توی شرایطی انجام بشه یه تریگر نوشتم که خطا میده میشه لطفا بگید واسه چیه؟


DELETE FROM dbo.tb_StoreFlow INNER JOIN
dbo.tb_StoreFlowDetail ON dbo.tb_StoreFlow.vcID = dbo.tb_StoreFlowDetail.vcStoreFlowID INNER JOIN
deleted ON dbo.tb_StoreFlow.vcFactorID = deleted.vcBuyFactorID
WHERE (dbo.tb_StoreFlow.vcFactorID = deleted.vcBuyFactorID) AND (dbo.tb_StoreFlow.vcFlag = 1)
AND (dbo.tb_StoreFlowDetail.vcObjectID = deleted.vcObjectID) AND (dbo.tb_StoreFlowDetail.vcSerialNo = deleted.vcSerialNo)

خطاشم اینه
.'Incorrect syntax near the keyword 'INNER

یوسف زالی
یک شنبه 27 آذر 1390, 10:17 صبح
سلام.
join در delete و update رو میشه با where در آورد:
Delete TBL1 from TBL2 where ID1 = ID2
در حقیقت در where کدهای On رو اضافه می کنیم.
موفق باشید.

az.heidarzadeh
یک شنبه 27 آذر 1390, 10:29 صبح
مرسی از جوابتون اما چطوری من برای Update همین کد و نوشتم درست کار میکنه


UPDATE [dbo].[tb_StoreFlowDetail]
SET [dcStoreID] = inserted.dcStoreID
,[dcEnterCount] = inserted.dcCount
,[vcObjectID] = inserted.vcObjectID
,[vcSerialNo] = inserted.vcSerialNo
FROM dbo.tb_StoreFlow INNER JOIN
dbo.tb_StoreFlowDetail ON dbo.tb_StoreFlow.vcID = dbo.tb_StoreFlowDetail.vcStoreFlowID INNER JOIN
inserted ON dbo.tb_StoreFlow.vcFactorID = inserted.vcBuyFactorID INNER JOIN
deleted ON dbo.tb_StoreFlow.vcFactorID = deleted.vcBuyFactorID
WHERE (dbo.tb_StoreFlow.vcFactorID = deleted.vcBuyFactorID) AND (dbo.tb_StoreFlow.vcFlag = 1)
AND (dbo.tb_StoreFlowDetail.vcObjectID = deleted.vcObjectID) AND (dbo.tb_StoreFlowDetail.vcSerialNo = deleted.vcSerialNo)

یوسف زالی
یک شنبه 27 آذر 1390, 10:48 صبح
به این دلیل که join شما با جدولی که داره update میشه در حقیقت در where ذکر شده.
اشکالی نداره که بعد از from از join استفاده کنیم.نمی شه این کار رو کرد:
update Table1 join Table2...
اما این می شه:
update Table set... from Table2 join Table3...

az.heidarzadeh
یک شنبه 27 آذر 1390, 11:14 صبح
باشه ممنون میشه یه نمونه برام بنویسید...

یوسف زالی
یک شنبه 27 آذر 1390, 11:25 صبح
چیزی شبیه به این:

DELETE dbo.tb_StoreFlow
from dbo.tb_StoreFlowDetail
INNER JOIN deleted ON dbo.tb_StoreFlow.vcFactorID = deleted.vcBuyFactorID
where dbo.tb_StoreFlow.vcID = dbo.tb_StoreFlowDetail.vcStoreFlowID
and (dbo.tb_StoreFlow.vcFactorID = deleted.vcBuyFactorID) AND (dbo.tb_StoreFlow.vcFlag = 1) AND (dbo.tb_StoreFlowDetail.vcObjectID = deleted.vcObjectID) AND (dbo.tb_StoreFlowDetail.vcSerialNo = deleted.vcSerialNo)

az.heidarzadeh
یک شنبه 27 آذر 1390, 12:08 عصر
ممنون درست شد... :لبخندساده: