想知道如何爲以下場景構建邏輯(我正在使用上面的SQL Server 2008 &)。填充數字範圍並連接子表中的文本
在TblMaster中,每條記錄都有一個開始值和一個結束值。還有一個CharToAdd varchar列。如果範圍是1到3,那麼在TblDetails中應該有一個1,2,3的條目。不確定我是否有效地解釋它,所以提供了一個樣本輸入/輸出的截圖。
範圍可能在5000到100000之間(最大),因此性能也是一個問題。
表結構:
CREATE TABLE [dbo].[VMaster](
[VID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[VName] [varchar](30) NOT NULL
)
GO
CREATE TABLE [dbo].[TblMaster](
[SID] [int] IDENTITY(1,1) NOT NULL Primary Key,
[VID] [int] NOT NULL,
[CreatedDate] [datetime] default (getdate()) NOT NULL,
[CharToAdd] [varchar](10) NOT NULL,
[Start] [int] NOT NULL,
[End] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TblDetails](
[DetailsID] [int] IDENTITY(1,1) NOT NULL Primary Key,
[SID] [int] NOT NULL,
[Sno] [int] NOT NULL,
[ConcatenatedText] [varchar](20) NOT NULL,
[isIssued] [bit] default (0) NOT NULL,
[isUsed] [bit] default (0) NOT NULL
)
GO
ALTER TABLE [dbo].[TblMaster] WITH CHECK ADD CONSTRAINT [fk_SI_id] FOREIGN KEY([VID])
REFERENCES [dbo].[VMaster] ([VID])
GO
ALTER TABLE [dbo].[TblMaster] CHECK CONSTRAINT [fk_SI_id]
GO
爲表的示例數據:插入到表
Insert into dbo.VMaster Values ('A1')
GO
Insert into dbo.TblMaster Values (1,default, 'ABC', 100, 105)
GO
編輯:如果TblMaster中的記錄稍後得到更新會怎麼樣?如果TblDetails中的所有位字段對於所有對應的自動生成的行都爲0,則應刪除舊記錄並根據更新的「新範圍」重新生成。
--Modifying the original range. So the records 100, 104, 105 has to be removed
-- from tblDetails if its isIssued, isUsed are both 0.
-- If not will have to reject this update
Update dbo.TblMaster
Set Start = 101, [End] = 103
Where SID = 1
--Another scenario. We need to remove 100,101,102,103,104,105 from tblDetails if
-- its isIssued, isUsed are both 0. Then create entries from 1000 to 1500 in tblDetails.
-- If isIssued, isUsed are not 0 then will have to reject this update
Update dbo.TblMaster
Set Start = 1000, [End] = 1500
Where SID = 1
感謝您的建議。我編輯了這個問題,你可以檢查一下,如果可能的話更新你的答案? – prasanth
不理解變化。你可以發佈樣本嗎? –
已經更新了幾個樣本的編輯。請檢查是否有幫助 – prasanth