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

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

آپدیت روزانه

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

نیازهای روز

دستورات مختصر پایگاه داده SSMS - بخش چهارم

چگونه می‌توان به ازای هر رکورد از جدولی، N رکورد در جدول دیگر فقط با یک دستور SQL با مقادیر مختلف از فیلدهای رکورد انتخابی درج نمود؟ مفروض است دو جدول SecurityItemAuthorize و SecurityItemMember به صورت زیر خواهیم داشت:

CREATE TABLE SecurityItemAuthorize
(
	Id INT IDENTITY(1, 1),
	UserId INT NOT NULL,
	OfficeId INT NOT NULL,
	PositionId INT NOT NULL,
	DepartmentId INT NOT NULL,
	IsActive BIT NOT NULL
);
CREATE TABLE SecurityItemMember
(
	Id INT IDENTITY(1, 1),
	ContainerSecurityItemId INT NOT NULL,
	MemberSecurityItemId INT NOT NULL,
	IsLogicalMemberShip INT NOT NULL
);

جدول SecurityItemAuthorize شامل فیلدهای PositionId، OfficeId و DepartmentId است که مقادیر سه جدول دیگری در آن درج شده است:

INSERT INTO SecurityItemAuthorize VALUES(/*UserId*/1, /*OfficeId*/1, /*PositionId*/1 , /*DepartmentId*/1, /*IsActive*/0);
INSERT INTO SecurityItemAuthorize VALUES(/*UserId*/2, /*OfficeId*/1, /*PositionId*/2 , /*DepartmentId*/2, /*IsActive*/1);

فیلد ContainerSecurityItemId از جدول SecurityItemMember شامل ارتباط پایگاه داده است که مقادیر OfficeId، PositionId یا DepartmentId را در خود می‌تواند ذخیره کند، می‌خواهیم با استفاده از SQL به ازای هر رکورد در جدول SecurityItemAuthorize سه رکورد در جدول SecurityItemMember یک بار برای PositionId، رکورد دوم برای OfficeId و رکورد سوم مقدار DepartmentId از رکورد انتخابی از جدول SecurityItemAuthorize درج نمایم:

INSERT INTO SecurityItemMember 
	   SELECT 
       Case N.n 
			When 1 then S.DepartmentId When 2 then S.PositionId WHEN 3 then S.OfficeId 
	   End,      -- ContainerSecurityItemId
       S.UserId, -- MemberSecurityItemId
	   1         -- IsLogicalMemberShip
	   From SecurityItemAuthorize AS S
	   INNER JOIN ( SELECT 1 UNION SELECT 2 UNION SELECT 3 )N(n) ON 1=1
	   -- WHERE 

مقدار فیلد MemberSecurityItemId از جدول SecurityItemMember برابر است با مقدار فیلد UserId در هر رکورد از جدول SecurityItemAuthorize، در پایان می‌توان دستور شرطی اگر نیاز باشد آن را اضافه نمود.

امید نصری

0 نظر:

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


You must log on to comment.