如何在SQL中附加到现有记录?

如何在SQL中附加到现有记录?,sql,database,tsql,sql-server-2008,Sql,Database,Tsql,Sql Server 2008,有人能告诉我如何在SQL中追加吗?我整天都在想办法解决这个问题。这就是我到目前为止所做的: update table1 set field1 = field1 + '123456' where field2 = '12' 抱歉,我忘了提到我正在更新语句中的多个字段。您的问题有点混乱,因为您说的是append,但您的示例实际上只是一个集合操作: update table1 set field1 = '123456', field2 = '' where field2 = '12' 如果您真

有人能告诉我如何在SQL中追加吗?我整天都在想办法解决这个问题。这就是我到目前为止所做的:

update table1 
set field1 = field1 + '123456' 
where field2 = '12'

抱歉,我忘了提到我正在更新语句中的多个字段。

您的问题有点混乱,因为您说的是append,但您的示例实际上只是一个集合操作:

update table1 set field1 = '123456', field2 = '' where field2 = '12'
如果您真的要追加它,这将取决于您的数据库,但查找字符串串联用于引用

update table set field1 = concat(field2, '3456') where field2 = '12'

只要field1不为null或要追加的数据不为null,语句就应该有效

在field1为null的情况下,类似的内容可能会有所帮助

update table1 set field1 = ISNULL(field1, '') + '123456' where field2 = '12'

这里是varchar串联和整数加法之间的区别,您似乎正在进行varchar串联,您可能需要使用来添加数字

示例1带整数:

DECLARE @table1 TABLE(field1 int, field2 int)
INSERT INTO @table1 VALUES (123456, 12)
SELECT 'before' as 'before', * FROM @table1

UPDATE @table1 SET field1 = field1 + 123456 WHERE field2 = 12
SELECT 'after' as 'after', * FROM @table1
DECLARE @table2 TABLE(field1 varchar(50), field2 varchar(2))
INSERT INTO @table2 VALUES ('123456', '12')
SELECT 'before' as 'before', * FROM @table2

UPDATE @table2 SET field1 = field1 + '123456' WHERE field2 = '12'
SELECT 'after' as 'after', * FROM @table2
示例1结果:

DECLARE @table1 TABLE(field1 int, field2 int)
INSERT INTO @table1 VALUES (123456, 12)
SELECT 'before' as 'before', * FROM @table1

UPDATE @table1 SET field1 = field1 + 123456 WHERE field2 = 12
SELECT 'after' as 'after', * FROM @table1
DECLARE @table2 TABLE(field1 varchar(50), field2 varchar(2))
INSERT INTO @table2 VALUES ('123456', '12')
SELECT 'before' as 'before', * FROM @table2

UPDATE @table2 SET field1 = field1 + '123456' WHERE field2 = '12'
SELECT 'after' as 'after', * FROM @table2

示例2 w/varchar:

DECLARE @table1 TABLE(field1 int, field2 int)
INSERT INTO @table1 VALUES (123456, 12)
SELECT 'before' as 'before', * FROM @table1

UPDATE @table1 SET field1 = field1 + 123456 WHERE field2 = 12
SELECT 'after' as 'after', * FROM @table1
DECLARE @table2 TABLE(field1 varchar(50), field2 varchar(2))
INSERT INTO @table2 VALUES ('123456', '12')
SELECT 'before' as 'before', * FROM @table2

UPDATE @table2 SET field1 = field1 + '123456' WHERE field2 = '12'
SELECT 'after' as 'after', * FROM @table2
示例2结果:

DECLARE @table1 TABLE(field1 int, field2 int)
INSERT INTO @table1 VALUES (123456, 12)
SELECT 'before' as 'before', * FROM @table1

UPDATE @table1 SET field1 = field1 + 123456 WHERE field2 = 12
SELECT 'after' as 'after', * FROM @table1
DECLARE @table2 TABLE(field1 varchar(50), field2 varchar(2))
INSERT INTO @table2 VALUES ('123456', '12')
SELECT 'before' as 'before', * FROM @table2

UPDATE @table2 SET field1 = field1 + '123456' WHERE field2 = '12'
SELECT 'after' as 'after', * FROM @table2

在Oracle中,字符串连接如下:

field1 = field1 || '12345'

如果您使用的是MySQL,查询可以简化为

UPDATE table set field1 = CONCAT('123456', field1) where field2 = '12' 

你发现这不管用吗?简而言之,如果field1是varchar/nvarchar,那么您所写的内容将被追加。是的,field1是varchar(max),但它不会追加。如果您追加到字符串,您是否尝试过concat?例如,更新表1 set field1=field1 concat'123456',其中field2='12'您使用的是什么DBMS?SQL不一定是MS SQL Server。顺便问一下,为什么要标记ASP.Net,它似乎与ASP.Net没有任何关系?请发布实际代码、使用的SQL风格、得到的结果/错误以及预期结果。谢谢。这就是我的问题。捕捉到空值的良好呼叫将打破我的问题。。。set field1='123456'与set field1=field1+'123456'不同@lazydba同意,但如果你读了我答案的第一句话,那不是我要说的重点。好吧。。。就这样吧。他的“设置”操作试图用字段1中已有的内容和其他内容“附加”字段1。
concat()。谢谢严格地说,如果我们要遵循OP给出的示例,CONCAT()的参数应该交换