Sql server 不声明变量的SQL游标循环

Sql server 不声明变量的SQL游标循环,sql-server,Sql Server,我在SQLServer中有一个平面表(所有列类型都是varchar),它包含200列,其中100列将包含包括小数在内的数值。我的要求是循环所有列,并检查任何列行是否包含字母数字或非数字值(例如100a0等) 为了实现上述场景,在SQL中,我们使用了游标,这有助于执行循环,但要循环100列,我需要声明100个变量并存储如下所示的值 在SQL中 但是,在oracle的另一面,我们有游标,但有一些更方便的方法来处理上述场景 在甲骨文中 create or replace procedure FooBa

我在SQLServer中有一个平面表(所有列类型都是varchar),它包含200列,其中100列将包含包括小数在内的数值。我的要求是循环所有列,并检查任何列行是否包含字母数字或非数字值(例如100a0等)

为了实现上述场景,在SQL中,我们使用了游标,这有助于执行循环,但要循环100列,我需要声明100个变量并存储如下所示的值 在SQL中

但是,在oracle的另一面,我们有游标,但有一些更方便的方法来处理上述场景

在甲骨文中

create or replace procedure FooBar
as

cursor mydata is
select dog as d, cat as c, fish as f
  from temp;

begin
  for dr in mydata loop

    UPDATE foo SET dogs = dr.d, cats = dr.c, fishes = dr.f;

  end loop;
end;
那么,有谁能帮助我在不声明100个变量的情况下在SQL中实现上述场景呢


谢谢。

起点可能是从sys.tables中选择列:

SELECT t.name AS table_name, SCHEMA_NAME(schema_id) AS schema_name, c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID

然后,基于列名,编写动态sql来测试该列的非数值,并将输出写入临时表。我正在努力想一种基于集合的方法来实现这一点,但是拥有一组列是一个起点。祝你好运。

在解决游标中的变量问题之前,先确定是否需要游标。您可能能够以基于集合的方式执行此操作。@FelixPamittan,只是为了添加更多信息,DB表中的数据将从excel文件中填充,并带有excel文件的行号。所以,若任何列行具有非数字值,那个么我需要使用行号登录表。我想,这里需要循环。就像你写的那样。。。您只是在循环行。。。不是列。您需要更新包含字母数字或非数字值的列吗?@dzomba,实际上不需要,我必须检查值并登录日志表。
SELECT t.name AS table_name, SCHEMA_NAME(schema_id) AS schema_name, c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID