קבלת פלט מפקודות שינויים בטבלאות באמצעות Output

By | 5 ביוני 2010

מאמר זה הינו הראשון בסדרת מאמרים. סדרת מאמרים זו תסביר את האופן בו ניתן לנהל שינויים במימד על פני זמן (Slowly Changing Dimension – SCD) באמצעות פקודת T-SQL חדשות ב- SQL 2008. הסיבות בעטיין אני סבור שעדיף לנהל שינויים במימד באמצעות T-SQL ולא באמצעות האשף של SSIS  יפורטו באחד המאמרים הבאים.

תחילה נכיר את האפשרות החדשה לקבל כפלט מפקודות Insert,  Delete, Merge את הרשומות או חלק מהרשומות שפקודות אלו שינו בטבלה.

קבלת פלט מפקודות אלו מבוצעת באמצעות רכיב הפקודה Output. לצורך ההדגמה ניצור טבלה ונאכלסה במספר רשומות:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[dmnLakoah]') AND type in (N'U'))

DROP TABLE [dbo].[dmnLakoah] ;

CREATE TABLE [dbo].[dmnLakoah](

[Gkakoah] [int] IDENTITY(1,1) NOT NULL,

[MisZehut] [int] NOT NULL,

[ShemLakoah] [varchar](20) NOT NULL,

[YeshuvMegurim] [varchar](20) NOT NULL,

[RamatSahar] [char](1) NOT NULL,

[DerugAshray] [char](2) NOT NULL,

[PailLoPail] [bit] NOT NULL,

[TaarichPtiha] [date] NOT NULL,

[TaarichSgira] [date] NOT NULL

) ON [PRIMARY]

INSERT INTO [tempdb].[dbo].[dmnLakoah]

([MisZehut]

,[ShemLakoah]

,[YeshuvMegurim]

,[RamatSahar]

,[DerugAshray]

,[PailLoPail]

,[TaarichPtiha]

,[TaarichSgira])

VALUES

(279754

,'משה כהן'

,'קרני חיטים'

,'א'

,'AA'

,1

,'2010-5-30'

,'9999-12-31')

,

(234875

,'יובל לוי'

,'תל אביב'

,'ב'

,'B'

,1

,'2010-5-30'

,'9999-12-31')

,

(5498124

,'יונת שמעון'

,'חיפה'

,'ג'

,'A'

,1

,'2010-5-30'

,'9999-12-31')

,

(948102

,'דלית יוסף'

,'עפולה'

,'א'

,'AA'

,1

,'2010-5-30'

,'9999-12-31');

נבצע מחיקה של רשומה מתוך הטבלה תוך שימוש ב- OUTPUT על מנת להציג את הרשומה שנמחקה:

delete [dbo].[dmnLakoah]

output deleted.*

where MisZehut=234875;

במקום כוכבית ניתן כמובן לרשום שם של שדה מתוך הרשומה על מנת להציג רק חלק מהרשומה שנמחקה.

את פרטי הרשומה שנמחקה או חלק מהם, ניתן לטעון לתוך טבלה אחרת. לצורך כך נקים טבלה נוספת:

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[dmnLakoah_Deleted]') AND type in (N'U'))

DROP TABLE [dbo].dmnLakoah_Deleted

CREATE TABLE [dbo].dmnLakoah_Deleted(

[Gkakoah] [int] NOT NULL,

[MisZehut] [int] NOT NULL,

[ShemLakoah] [varchar](20) NOT NULL,

[YeshuvMegurim] [varchar](20) NOT NULL,

[RamatSahar] [char](1) NOT NULL,

[DerugAshray] [char](2) NOT NULL,

[PailLoPail] [bit] NOT NULL,

[TaarichPtiha] [date] NOT NULL,

[TaarichSgira] [date] NOT NULL

) ON [PRIMARY]

אל תוך טבלה זו נטען את הרשומות אותן אנו מוחקים:

insert dmnLakoah_Deleted
select *
from (
delete [dbo].[dmnLakoah]
output deleted.*
where MisZehut=234875
) DeletedRecords;
select * from dmnLakoah_Deleted;

insert dmnLakoah_Deleted select * from ( delete [dbo].[dmnLakoah] output deleted.*  where MisZehut=234875 ) DeletedRecords;

הורדת דוגמאות הקוד

Share

4 thoughts on “קבלת פלט מפקודות שינויים בטבלאות באמצעות Output

  1. Pingback: New T-SQL Command – Merge | BI and More

  2. Pingback: ניהול שינויים היסטוריים במימד. Slowly Changing dimension with SQL Server SSIS | BI and More

  3. Pingback: ניהול שינויים במימד באמצעות T-SQL | BI and More

  4. Pingback: שיר הפטנטים - גרי רשף

כתיבת תגובה

האימייל לא יוצג באתר.