在递增时将varchar值转换为数据类型int时转换失败

时间:2014-10-02 13:57:21

标签: sql casting insert

想知道你是否可以纠正我的语法。

update TestTable 
set test_person = CAST(test_person as Varchar = 'TEST' (50)) + 1

我试图更新表中的所有列并将其递增1(因此,因为列是字符串,所以是强制转换)。

2 个答案:

答案 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