A.Farzin
پنج شنبه 17 آبان 1386, 00:25 صبح
با سلام
دو جدول دارم که یکی از آنها حاوی مشخصات مشتریان (جدول Parent) و دیگری حاوی مشخصات قراردادهای بسته شده با این مشتریان (جدول Child) است. در یک کوئری به طریق زیر از محتویات این دو جدول SELECT میزنم.
-- Query
SELECT dbo.tblContracts.CntrctNo,
dbo.tblContracts.YearSale,
dbo.tblContracts.SellerCod,
dbo.tblContracts.Agent,
dbo.tblContracts.SaleField,
dbo.tblContracts.SaleProjectID,
dbo.tblContracts.DateStart,
dbo.tblContracts.CntrctPeriod,
dbo.tblContracts.CustomerID,
dbo.tblCustomer.CustomerNam ,
dbo.tblContracts.UserIDR,
dbo.tblContracts.DateRvw,
dbo.tblContracts.NoteRVW
FROM dbo.tblContracts LEFT OUTER JOIN dbo.tblCustomer ON
dbo.tblContracts.CustomerID = dbo.tblCustomer.CustomerID
WHERE dbo.tblContracts.CntrctNo = 117565
اگر یکی از رکوردهای SELECT فوق را DELETE کنم، مشخصات مشتری مربوطه از جدول Parent هم حذف میشود در حالیکه من نمیخواهم مشخصات مشتری حذف شود و فقط به دنبال حذف مشخصات یک قرارداد خاص هستم.
به نظر شما اشکال کار من کجاست؟
مشخصات دو جدول یاد شده به شرح زیر است:
-- Parent Table
CREATE TABLE [dbo].[tblCustomer] (
[CustomerID] [float] NOT NULL ,
[CustomerNam] [nvarchar] (100) COLLATE Arabic_CI_AS NULL ,
[CustomerBCod] [int] NULL ,
[CustomerAddress] [nvarchar] (150) COLLATE Arabic_CI_AS NULL ,
[CustomerTel] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
[UserIDR] [int] NULL ,
[RVW] [tinyint] NULL ,
[DateRVW] [datetime] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblCustomer] WITH NOCHECK ADD
CONSTRAINT [PK_tblCustomer] PRIMARY KEY CLUSTERED
(
[CustomerID]
) ON [PRIMARY]
GO
CREATE INDEX [IX_CustomerBCod] ON [dbo].[tblCustomer]([CustomerBCod]) ON [PRIMARY]
GO
-- Child Table
CREATE TABLE [dbo].[tblContracts] (
[tblID] [int] IDENTITY (1, 1) NOT NULL ,
[CntrctNo] [float] NOT NULL ,
[YearSale] [smallint] NOT NULL ,
[SellerCod] [float] NOT NULL ,
[Agent] [float] NOT NULL ,
[SaleField] [float] NOT NULL ,
[SaleProjectID] [tinyint] NOT NULL ,
[CurrencyID] [int] NULL ,
[DateStart] [nvarchar] (10) COLLATE Arabic_CI_AS NULL ,
[CntrctPeriod] [int] NULL ,
[CustomerID] [float] NULL ,
[UserIDR] [int] NULL ,
[RVW] [tinyint] NULL ,
[DateRvw] [datetime] NULL ,
[NoteRVW] [nvarchar] (100) COLLATE Arabic_CI_AS NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblContracts] WITH NOCHECK ADD
CONSTRAINT [PK_tblContracts] PRIMARY KEY CLUSTERED
(
[CntrctNo],
[YearSale],
[SellerCod],
[Agent],
[SaleField],
[SaleProjectID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblContracts] WITH NOCHECK ADD
CONSTRAINT [DF_tblContracts_CurrencyID] DEFAULT (1) FOR [CurrencyID]
GO
CREATE INDEX [IX_CntrctNo] ON [dbo].[tblContracts]([CntrctNo]) ON [PRIMARY]
GO
CREATE INDEX [IX_YearSale] ON [dbo].[tblContracts]([YearSale]) ON [PRIMARY]
GO
CREATE INDEX [IX_SellerCod] ON [dbo].[tblContracts]([SellerCod]) ON [PRIMARY]
GO
CREATE INDEX [IX_SaleField] ON [dbo].[tblContracts]([SaleField]) ON [PRIMARY]
GO
CREATE INDEX [IX_Agent] ON [dbo].[tblContracts]([Agent]) ON [PRIMARY]
GO
CREATE INDEX [IX_SaleProjectID] ON [dbo].[tblContracts]([SaleProjectID]) ON [PRIMARY]
GO
CREATE INDEX [IX_CustomerID] ON [dbo].[tblContracts]([CustomerID]) ON [PRIMARY]
GO
دو جدول دارم که یکی از آنها حاوی مشخصات مشتریان (جدول Parent) و دیگری حاوی مشخصات قراردادهای بسته شده با این مشتریان (جدول Child) است. در یک کوئری به طریق زیر از محتویات این دو جدول SELECT میزنم.
-- Query
SELECT dbo.tblContracts.CntrctNo,
dbo.tblContracts.YearSale,
dbo.tblContracts.SellerCod,
dbo.tblContracts.Agent,
dbo.tblContracts.SaleField,
dbo.tblContracts.SaleProjectID,
dbo.tblContracts.DateStart,
dbo.tblContracts.CntrctPeriod,
dbo.tblContracts.CustomerID,
dbo.tblCustomer.CustomerNam ,
dbo.tblContracts.UserIDR,
dbo.tblContracts.DateRvw,
dbo.tblContracts.NoteRVW
FROM dbo.tblContracts LEFT OUTER JOIN dbo.tblCustomer ON
dbo.tblContracts.CustomerID = dbo.tblCustomer.CustomerID
WHERE dbo.tblContracts.CntrctNo = 117565
اگر یکی از رکوردهای SELECT فوق را DELETE کنم، مشخصات مشتری مربوطه از جدول Parent هم حذف میشود در حالیکه من نمیخواهم مشخصات مشتری حذف شود و فقط به دنبال حذف مشخصات یک قرارداد خاص هستم.
به نظر شما اشکال کار من کجاست؟
مشخصات دو جدول یاد شده به شرح زیر است:
-- Parent Table
CREATE TABLE [dbo].[tblCustomer] (
[CustomerID] [float] NOT NULL ,
[CustomerNam] [nvarchar] (100) COLLATE Arabic_CI_AS NULL ,
[CustomerBCod] [int] NULL ,
[CustomerAddress] [nvarchar] (150) COLLATE Arabic_CI_AS NULL ,
[CustomerTel] [nvarchar] (50) COLLATE Arabic_CI_AS NULL ,
[UserIDR] [int] NULL ,
[RVW] [tinyint] NULL ,
[DateRVW] [datetime] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblCustomer] WITH NOCHECK ADD
CONSTRAINT [PK_tblCustomer] PRIMARY KEY CLUSTERED
(
[CustomerID]
) ON [PRIMARY]
GO
CREATE INDEX [IX_CustomerBCod] ON [dbo].[tblCustomer]([CustomerBCod]) ON [PRIMARY]
GO
-- Child Table
CREATE TABLE [dbo].[tblContracts] (
[tblID] [int] IDENTITY (1, 1) NOT NULL ,
[CntrctNo] [float] NOT NULL ,
[YearSale] [smallint] NOT NULL ,
[SellerCod] [float] NOT NULL ,
[Agent] [float] NOT NULL ,
[SaleField] [float] NOT NULL ,
[SaleProjectID] [tinyint] NOT NULL ,
[CurrencyID] [int] NULL ,
[DateStart] [nvarchar] (10) COLLATE Arabic_CI_AS NULL ,
[CntrctPeriod] [int] NULL ,
[CustomerID] [float] NULL ,
[UserIDR] [int] NULL ,
[RVW] [tinyint] NULL ,
[DateRvw] [datetime] NULL ,
[NoteRVW] [nvarchar] (100) COLLATE Arabic_CI_AS NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblContracts] WITH NOCHECK ADD
CONSTRAINT [PK_tblContracts] PRIMARY KEY CLUSTERED
(
[CntrctNo],
[YearSale],
[SellerCod],
[Agent],
[SaleField],
[SaleProjectID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblContracts] WITH NOCHECK ADD
CONSTRAINT [DF_tblContracts_CurrencyID] DEFAULT (1) FOR [CurrencyID]
GO
CREATE INDEX [IX_CntrctNo] ON [dbo].[tblContracts]([CntrctNo]) ON [PRIMARY]
GO
CREATE INDEX [IX_YearSale] ON [dbo].[tblContracts]([YearSale]) ON [PRIMARY]
GO
CREATE INDEX [IX_SellerCod] ON [dbo].[tblContracts]([SellerCod]) ON [PRIMARY]
GO
CREATE INDEX [IX_SaleField] ON [dbo].[tblContracts]([SaleField]) ON [PRIMARY]
GO
CREATE INDEX [IX_Agent] ON [dbo].[tblContracts]([Agent]) ON [PRIMARY]
GO
CREATE INDEX [IX_SaleProjectID] ON [dbo].[tblContracts]([SaleProjectID]) ON [PRIMARY]
GO
CREATE INDEX [IX_CustomerID] ON [dbo].[tblContracts]([CustomerID]) ON [PRIMARY]
GO