在SSMS中每次获取时刷新游标表条目

时间:2018-07-22 06:53:54

标签: sql dynamic cursor ssms

我想编写一个存储过程,将一长串的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语句有效?

我试图声明一个动态游标,但这不能解决问题。

0 个答案:

没有答案