1 回答

TA貢獻1797條經(jīng)驗 獲得超6個贊
桌子的設計有點奇怪。理想情況下,ApplicationID應該是一個標識列,以便SQL Server為您自動增加它。但是,嘿,我們都處理一些無法控制的遺留系統(tǒng)。
請參見下面的SQL提琴,以了解執(zhí)行此操作的一種方法。顯然,當您擁有999個以上的應用程序時,該應用程序?qū)⒈罎?,因此您必須進行以下處理:
MS SQL Server 2017架構設置:
CREATE TABLE Application (Id varchar(3), ApplicationName varchar(max))
CREATE TABLE AppCategory (Id varchar(2), CategoryName nvarchar(max))
CREATE TABLE AppPerCategory (CategoryId varchar(2), ApplicationId varchar(3), SeqIndex int)
INSERT Application VALUES ('091', 'foo')
INSERT AppCategory VALUES ('00', 'test category')
INSERT AppPerCategory VALUES ('00', '091', 1)
查詢1:
-- Assume below two are inputs for creating new application
DECLARE @newAppName varchar(max) = 'new application'
DECLARE @category varchar(max) = 'test category'
-- Below will set newAppId to 092. Not you have to adjust for when # apps > 999
DECLARE @newAppId varchar(3) = (SELECT REPLACE(STR(CAST(MAX(Id) AS int) + 1, 3), ' ', 0) FROM Application)
DECLARE @categoryId varchar(2) = (SELECT Id from AppCategory WHERE CategoryName = @category)
DECLARE @newCategorySeqIndex int = (SELECT MAX(SeqIndex) + 1 FROM AppPerCategory WHERE CategoryId = @categoryId)
INSERT Application (Id, ApplicationName)
VALUES (@newAppId, @newAppName)
INSERT AppPerCategory (CategoryId, ApplicationId, SeqIndex)
VALUES (@categoryId, @newAppId, @newCategorySeqIndex)
- 1 回答
- 0 關注
- 207 瀏覽
添加回答
舉報