从JunctionTable更新/删除TSQL

时间:2016-11-20 21:54:47

标签: sql-server tsql

我很难找到管理以下方案的正确方法。

我有3个表类别,列表,结点

我正在使用Junction表来获取我的类别和&之间的多对多关系。列表表格,如清单表格中的任何给定记录,可以从“类别”表中分配1个或多个类别。

我已经弄清楚如何正确插入两者。现在我的困境是更新。

如果用户想要将他们的列表更新为新类别,那么我的代码需要删除JunctionTable中的任何现有记录并替换为新记录。如何编写实现该语句的SQL语句?

这是我在添加商家信息时触发的两个插入语句。

INSERT INTO BND_Listing_testing
(Company,Doors,Address,Address2,City,Region,Country,PostalCode,Lat,Long,Phone,Fax,Website,Description,Actualized,Verified,IMG1,IMG2,IMG3,IMG4,DateAdded)
VALUES
('[Company]','[Doors]','[Address]','[Address2]','[City]','[Region]','[Country]','[PostalCode]','[Lat]','[Long]','[Phone]','[Fax]','[Website]','[Description]','[Actualized]','[Verified]','[Image1]','[Image2]','[Image3]','[Image4]','[DateAdded]')

select scope_identity()

我将上述查询的标识存储在令牌[ScopedLID]中,用于以下查询

DECLARE @CatIDStr VARCHAR(100) = '[CatID]',@CatID VARCHAR(100) = ''

WHILE LEN(@CatIDStr) > 0
BEGIN

   IF CHARINDEX(',',@CatIDStr) = 0
   BEGIN
      SET @CatID = @CatIDStr
      SET @CatIDStr = ''
   END  
   ELSE
   BEGIN
     SELECT @CatID = SUBSTRING(@CatIDStr,0,CHARINDEX(',',@CatIDStr))                                        
     SELECT @CatIDStr=SUBSTRING(@CatIDStr,CHARINDEX(',',@CatIDStr)+1,LEN(@CatIDStr))
   END

   INSERT INTO BND_ListingJunction_testing (Junc_LID,Junc_CatID)
   Values ('[ScopedLID]',@CatID) 

END

1 个答案:

答案 0 :(得分:2)

使用交易。在该事务中,首先删除指定列表的联结表中的所有行,然后为列表和类别的选定组合添加新行。