چه تکنولوژی می‌خواهید یاد بگیرید؟

نظرات و انتقادات خود را با ما در میان بگذارید

آپدیت روزانه

بیش از 1500 مطلب آموزشی

نیازهای روز

پایگاه داده: حذف دسته بندی بانک اطلاعاتی با استفاده از T-SQL در SSMS

مفروض است جدول دسته بندی بانک اطلاعاتی پروژه‌ای به صورت ذیل می‌باشد:

CREATE TABLE [dbo].[Category] (
    [Id]          INT            NOT NULL,
    [ParentId]    INT            NULL,
    [Name]        NVARCHAR (500) NOT NULL,
    [AddedByUser] BIT            NOT NULL,
    CONSTRAINT [PK_Category] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (FILLFACTOR = 90),
    CONSTRAINT [FK_Category_Category] FOREIGN KEY ([ParentId]) REFERENCES [dbo].[Category] ([Id])
);

جدول فوق با جدول Identity_Category رابطه یک به چند را شامل است:

CREATE TABLE [dbo].[Identity_Category] (
    [IdentityId] INT NOT NULL,
    [CategoryId] INT NOT NULL,
    CONSTRAINT [PK_Identity_Category] PRIMARY KEY CLUSTERED ([IdentityId] ASC, [CategoryId] ASC) WITH (FILLFACTOR = 90),
    CONSTRAINT [FK_Identity_Category_Category] FOREIGN KEY ([CategoryId]) REFERENCES [dbo].[Category] ([Id]),
    CONSTRAINT [FK_Identity_Category_Identity] FOREIGN KEY ([IdentityId]) REFERENCES [dbo].[Identity] ([Id])
);

مسئله:

با استفاده از یک راه‌حل ساده کلیه دسته بندی‌های که توسط کاربر ایجاد نشده‌اند و هیچ هویت را در زیر مجموعه خود ندارند از بانک اطلاعاتی با استفاده از T-SQL حذف نماید؟

DECLARE @HasCategoryToRemove INT = 1;

WHILE (@HasCategoryToRemove != 0)
BEGIN
	DELETE C FROM dbo.Category AS C 
		LEFT JOIN Identity_Category AS IC ON C.Id = IC.CategoryId 
			WHERE IC.CategoryId IS NULL AND C.AddedByUser = 0 
				AND C.Id NOT IN (SELECT _C.ParentId FROM Category AS _C WHERE _C.ParentId IS NOT NULL);

	SET @HasCategoryToRemove = @@ROWCOUNT;
END



0 نظر:

تعداد دیدگاه‌های کاربران : 0 دیدگاه
مهمان گرامی! برای ارسال نظر نیاز است وارد سایت شوید.