我想编写一个存储过程,将一长串的nvarchar列转换为int,bigint或float。我想先尝试将列更新为int,并且只有在失败的情况下,我才想尝试将其转换为bigint,然后如果也失败,则将其转换为float,即,我只想尝试将列转换为当前类型为varchar。
我正在尝试使用选择两列的游标来实现这一点:第一列是试图执行更改的动态查询,第二列是该列的当前数据类型:
DECLARE COL CURSOR FOR
select 'sqlquery',DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS where table_name = @table
for update of DATA_TYPE
open col
FETCH NEXT FROM col INTO @sql,@currentType
WHILE @@FETCH_STATUS = 0
BEGIN
if(@currentType like '%varchar%') EXEC(@sql)
FETCH NEXT FROM col INTO @sql,@currentType
END
CLOSE col DEALLOCATE col
我遇到的问题是,即使该列已更改为int或bigint之后,@ currenttype似乎仍保留为varchar,因此我所有的int列都转换为float。我是在这里正确使用update还是仅对游标中的delete和update语句有效?
我试图声明一个动态游标,但这不能解决问题。