PDA

View Full Version : سوال: اشکال در اجرای دستور insert



f_arab
شنبه 18 دی 1389, 00:26 صبح
با عرض سلام خدمت دوستان عزیز
دو جدول دارم که به هم مرتبط هستند و وقتی میخوام اطلاعات رو با دستور insert وارد جدولی کنم که دارای کلید خارجی هست با خطای زیر روبرو میشم:


Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tozi_software_software". The conflict occurred in database "it", table "dbo.software", column 'sname'.
The statement has been terminated.

این نکته رو هم بگم که من در فیلدی که کلید خارجی هست مقداری رو وارد می کنم که قبلا به عنوان کلید اصلی در جدول دیگه وارد شده ولی نمیدونم چرا خطا میده!!!!
اینم ساختار جداولمه:


USE [it]
GO
/****** Object: Table [dbo].[tozi_software] Script Date: 01/08/2011 00:29:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tozi_software](
[sname] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL,
[kcode] [nvarchar](15) COLLATE Arabic_CI_AS NOT NULL,
[srecdate] [nchar](10) COLLATE Arabic_CI_AS NULL,
[usetime] [nvarchar](30) COLLATE Arabic_CI_AS NULL,
[tsexplain] [nvarchar](max) COLLATE Arabic_CI_AS NULL,
CONSTRAINT [PK_tozi_software_1] PRIMARY KEY CLUSTERED
(
[sname] ASC,
[kcode] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
USE [it]
GO
ALTER TABLE [dbo].[tozi_software] WITH CHECK ADD CONSTRAINT [FK_tozi_software_karmand] FOREIGN KEY([kcode])
REFERENCES [dbo].[karmand] ([kcode])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[tozi_software] WITH CHECK ADD CONSTRAINT [FK_tozi_software_software] FOREIGN KEY([sname])
REFERENCES [dbo].[software] ([sname])
ON UPDATE CASCADE
ON DELETE CASCADE




USE [it]
GO
/****** Object: Table [dbo].[software] Script Date: 01/08/2011 00:51:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[software](
[sname] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL,
[goal] [nvarchar](50) COLLATE Arabic_CI_AS NULL,
[stype] [char](10) COLLATE Arabic_CI_AS NULL,
[unetwork] [nchar](5) COLLATE Arabic_CI_AS NULL,
[data_base] [nvarchar](50) COLLATE Arabic_CI_AS NULL,
[planguage] [nvarchar](50) COLLATE Arabic_CI_AS NULL,
[license] [smallint] NULL,
[memory] [nvarchar](20) COLLATE Arabic_CI_AS NULL,
[price] [money] NULL,
[usecondition] [nvarchar](10) COLLATE Arabic_CI_AS NULL,
[sseller] [nvarchar](50) COLLATE Arabic_CI_AS NULL,
[sbdate] [nchar](10) COLLATE Arabic_CI_AS NULL,
[exdate] [nchar](10) COLLATE Arabic_CI_AS NULL,
[sexplain] [nvarchar](max) COLLATE Arabic_CI_AS NULL,
CONSTRAINT [PK_software] PRIMARY KEY CLUSTERED
(
[sname] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF

لطفا راهنمایی کنید چون خیلی مهمه:ناراحت:
ممنون

mehran_sh_t
شنبه 18 دی 1389, 08:19 صبح
مطمئن نیستم از حرفی که می زنم. ولی شاید به این دلیل باشه که sname رو هم به عنوان Foriegn key تعریف کردید و هم به عنوان Primary key. به این دلیل مطمئن نیستم که sname و kcode به صورت ترکیبی Primary key رو تشکیل دادن.

f_arab
شنبه 18 دی 1389, 09:11 صبح
مطمئن نیستم از حرفی که می زنم. ولی شاید به این دلیل باشه که sname رو هم به عنوان Foriegn key تعریف کردید و هم به عنوان Primary key. به این دلیل مطمئن نیستم که sname و kcode به صورت ترکیبی Primary key رو تشکیل دادن.
من جدول دیگه ای دارم که توی اون یه فیلد رو هم به عنوان کلید اصلی تعریف کردم و هم کلید خارجی ولی به چنین مشکلی برنخوردم
جالب اینه که تو این موردی که مشکل پیش اومده اگه مستقیم وارد جدولم بشم و اطلاعات رو وارد کنم هیچ ایرادی نمیگیره ولی با دستور insert و update مشکل داره و همون پیغام بالا رو میده

f_arab
شنبه 18 دی 1389, 18:03 عصر
سلام دوستان
مشکلو پیدا کردم میگم شاید به درد یک مثل من بخوره
1- تو جدولی که حاوی فیلد کلید اصلی (در ارتباط بین دو جدول) بود کلماتی استفاده شده بود که دارای حرف (ی) بود به همین دلیل وقتی کلید خارجی رو وارد می کردم حرف (ی) رو تشخیص نمیداد و خطای مغایرت با کلید خارجی بودن میداد.
2-من اطلاعات رو به صورت دستی به جدول حاوی کلید اصلی وارد کرده بودم و از دستور insert استفاده نکردم.
اگه اطلاعات با دستور insert وارد بشن دیگه مشکلی برای کلماتی که دارای حرف (ی) هستند پیش نمیاد.
:چشمک: