PDA

View Full Version : نوشتن 2 دستور حذف در یک sp



ramin149
جمعه 14 بهمن 1390, 15:31 عصر
سلام . این اولین sp من که داخل چند شرط گذاشتم . آیا از نظر نوشتاری و قواعد درسته ؟


CREATE PROC AccessGroupDeleteById
@IdAccessGroup int
AS
set nocount on
set xact_abort off
BEGIN
delete from dbo.tbl_AccessGroup
where IdAccessGroup=@IdAccessGroup

delete from dbo.tbl_AccessList
where IdAccessGroup=@IdAccessGroup
END

و اینکه در کد بالا اگر دستور دوم اجرا نشد دستور اول نیز بر می گرده به حالت اول ؟

tiphooo
جمعه 14 بهمن 1390, 16:11 عصر
اگر جدول tbl_AccessGroup شما با جدول tbl_AccessList شما اگر ارتباط دارد می توانید با ایجاد Relation و گذاشتن خاصیت Delete Rule روی Cascade دیگر نیازی به حذف در جدول tbl_AccessList نیست و این کار خودبخود انجام می گیرد در غیر اینصورت کدی که نوشتید درست است و ظاهرا با دستوری که گذاشتید set xact_abort off در صورتی که دستور اول اجرا نشود دستور دوم در هر صورت اجرا می شود . البته اگر دوستان اطلاعات بیشتری دارند راهنمایی بفرمایند.
ولی حالت منطقی این است که شما در صورتی که دستور اول اجرا نشد اجازه اجرای دستور دوم را ندهید.

ramin149
شنبه 15 بهمن 1390, 20:02 عصر
FROM tbl_Products
FROM tbl_Products FULL OUTER JOIN
tbl_ProductsList ON tbl_Products.IdProducts = tbl_ProductsList.IdProducts
WHERE (tbl_Products.IdProducts = @IdProducts)

من دستور حذف اطلاعات را در دو جدول بالا نوشتم اما اطلاعات مربوط رو از جدول tbl_Products حذف می کنه اما اطلاعات را از جدول tbl_ProductsList حذف نمیکنه ؟ مشکل از کجاست ؟
البته که بالا در یک sp است . (کل دستور sp)

CREATE PROC ProductsDelete
@IdProducts int
AS
BEGIN
DELETE
FROM tbl_Products
FROM tbl_Products FULL OUTER JOIN
tbl_ProductsList ON tbl_Products.IdProducts = tbl_ProductsList.IdProducts
WHERE (tbl_Products.IdProducts = @IdProducts)
END

بهزادصادقی
پنج شنبه 20 بهمن 1390, 01:35 صبح
شما نمی‌توانید دو تا FROM در یک دستور SELECT داشته باشید. مطمئن هستید که کد اس پی بالا اصلا compile میشود؟ Error نمی‌گیرید؟