2013-10-30 57 views
0

我有一个包含帐号和标签(关键词)的表。我的查询将检查该帐户是否存在,如果存在,则需要将新关键字附加到已经存在的关键字上。TSQL追加到行

如果账户没有退出,它只是做一个简单的插入。

我的挣扎是从IF Exists子句中获取当前标记,并在update语句中将新数据添加到其中。有任何想法吗?

BEGIN 
SET NOCOUNT ON; 

IF EXISTS (SELECT id, tags FROM AccountLogAccounts WHERE account = @account) 
BEGIN 
    UPDATE AccountLogAccounts 
    SET tags = (
     SELECT tags 
     FROM AccountLogAccounts 
     WHERE account = @account 
    ) + ',' @tags --This doesn't work :) 
    WHERE account = @account 
END 
ELSE 
    BEGIN 
     INSERT INTO AccountLogAccounts (
      account, 
      location, 
      tags, 
      whoAdded, 
      whenAdded 
     ) VALUES (
      @account, 
      @location, 
      @tags, 
      @ntid, 
      GETDATE() 
     ) 
      END 
END 
+0

那么该怎么办? –

+0

我需要从exist语句(当前标记)中获取结果,并在更新语句中将新数据附加到它。 – SBB

回答

2

而不是...

UPDATE AccountLogAccounts 
    SET tags = (
     SELECT tags 
     FROM AccountLogAccounts 
     WHERE account = @account 
    ) + ',' @tags --This doesn't work :) 
    WHERE account = @account 

...尝试...

UPDATE AccountLogAccounts 
    SET tags = tags + ',' + @tags 
    WHERE account = @account 

编辑

这里有一个小的演示(未经测试,但应该工作):

CREATE PROCEDURE UpdateMyText 
    @account int, 
    @tags nvarchar(max) 
AS 
UPDATE AccountLogAccounts 
    SET tags = CAST(tags as nvarchar(max)) + ',' + @tags 
    WHERE account = @account 
GO 

EXEC UpdateMyText 12345, 'abc' 
GO 
+0

“数据类型文本和varchar在添加操作符中不兼容。” – SBB

+0

@SSB你需要停止使用'TEXT'数据类型。你应该使用'VARCHAR(MAX)',而不是这个问题。 – RBarryYoung

+0

文本(和ntext)已被弃用,所以您应该用varchar替换它们。同时,只需将您的文本字段作为varchar。 – Andrew