想知道你是否可以纠正我的语法。
update TestTable
set test_person = CAST(test_person as Varchar = 'TEST' (50)) + 1
我试图更新表中的所有列并将其递增1(因此,因为列是字符串,所以是强制转换)。
答案 0 :(得分:3)
T-SQL
DECLARE @counter INT = 0
UPDATE TestTable
SET test_person = 'Test' + CAST(@counter AS VARCHAR(16)), @counter = @counter + 1
答案 1 :(得分:2)
我过去做过的在字符串列中增加值的事情是这样的:
http://sqlfiddle.com/#!6/7f0f5/2
create table testTable (id int primary key identity(1,1), test_person varchar(100))
insert into testTable (test_person)
select 'bob loblaw'
union all select 'Buster Bluth'
union all select 'Jason Bateman'
union all select 'gob'
union all select 'Lucille #2'
update testTable
set test_person = 'test ' + convert(varchar(30), id)
select * from testTable
结果:
ID TEST_PERSON
1 test 1
2 test 2
3 test 3
4 test 4
5 test 5
请注意,当您的表具有标识主键时,此方法有效。您没有提供整个表模式,但如果它没有此标识主键,您可以通过创建临时/变量表来保存 具有int主键的数据来执行类似操作。做同样的事情。
另一种选择是使用循环/光标来填充你的人口......但是这样写起来很痛苦。
另一个选择是使用ROW_NUMBER,这是sql server(不确定其他人)。如果没有完整的表模式,我只能举例说明如何完成:
在小提琴中看到:http://sqlfiddle.com/#!6/7f0f5/5
update testTable
set test_person = 'test ' + convert(varchar(30), rowNum)
from testTable
inner join (
-- create an incrementing number for each row
select row_number() over(order by test_person) as rowNum, test_person
from testTable
) rows on testTable.test_person = rows.test_person
select * from testTable