none
בעיה עם unique constraint RRS feed

  • שאלה

  • בוקר טוב לכולם!

    יש לי בעיה מאד מוזרה, של לי unique constraint לטבלה:

    ALTER TABLE [dbo].[pages] ADD  CONSTRAINT [uc_pages_url] UNIQUE NONCLUSTERED 
    (
    	[wId] ASC,
    	[url] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    GO

    כשאני מנסה ליצור דפים חדשים לטבלה, נזרק לי exception:

    Violation of UNIQUE KEY constraint 'uc_pages_url'. Cannot insert duplicate key in object 'dbo.pages'. The duplicate key value is (1, http://www.thesite.org.il/P31897/).

    מה שמוזר פה, זה שלא את הדף הזה ניסיתי להכניס לטבלה.

    הדף הזה אמנם קיים, אבל הדף שניסיתי להכניס לא קיים.

    אני לא מבינה למה זה מקשר בין 2 הדפים.

    אשמח לעזרה!

    תודה!!!

    שרה.

    יום שני 26 מאי 2014 07:02

תשובות

  • הי שרה,

    אני לא מבין יותר מדי ב-LINQ, אבל אני מניח שהבעיה היא שכשאת עושה "SaveChanges", את מכניסה לא רק את הדף האחרון שיצרת, אלא עוד דפים אחרים שנמצאים כבר בתוך "db.pages". כנראה שאת מכניסה גם את הדף שהכנסת בפעם הקודמת, ולכן את מקבלת "Violation of Unique Key".

    מקווה שעזרתי...

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי ssfrank יום רביעי 28 מאי 2014 05:15
    יום רביעי 28 מאי 2014 03:48
    מנחה דיון

כל התגובות

  • בקרוב חברי הקהילה ינסו לסייע.

    תודה.


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

    יום שני 26 מאי 2014 15:40
  • הי שרה,

    זה באמת נשמע מוזר. את יכולה לפרסם את פקודת ה-INSERT שאת מריצה?

    יכול להיות שיש טריגר שגורם להכנסה של שורה אחרת?

    תודה!

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    יום שלישי 27 מאי 2014 07:00
    מנחה דיון
  • תודה על העזרה!!!!

    זו הייתה יצירה דרך שאילתת linq.

    var dbPage = new pages();
    dbPage.wId = data.wsId;
    dbPage.url = newPage.url;
    bPage.note = newPage.note;
    dbPage.status = 1;
    db.pages.AddObject(dbPage);
    db.SaveChanges();

    מה שהכי מוזר, כשעשיתי את אותו הדבר עם Prepare Statement (שאילתת insert רגילה) זה כן עבד.

    כמובן שהפרמטרים היו אותם פרמטרים.

    שוב תודה!!!!!

    שרה.

    יום שלישי 27 מאי 2014 18:15
  • הי שרה,

    אני לא מבין יותר מדי ב-LINQ, אבל אני מניח שהבעיה היא שכשאת עושה "SaveChanges", את מכניסה לא רק את הדף האחרון שיצרת, אלא עוד דפים אחרים שנמצאים כבר בתוך "db.pages". כנראה שאת מכניסה גם את הדף שהכנסת בפעם הקודמת, ולכן את מקבלת "Violation of Unique Key".

    מקווה שעזרתי...

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • סומן כתשובה על-ידי ssfrank יום רביעי 28 מאי 2014 05:15
    יום רביעי 28 מאי 2014 03:48
    מנחה דיון
  • ממש תודה על העזרה!!!

    אני אנסה לבדוק בכיוון הזה..

    שרה.

    יום רביעי 28 מאי 2014 05:16