Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 迭代列中的每一行并更新_Sql_Sql Server - Fatal编程技术网

Sql 迭代列中的每一行并更新

Sql 迭代列中的每一行并更新,sql,sql-server,Sql,Sql Server,我有一个名为“Subject”的sql server表列 UPDATE mytable SET SUBJECT=HASHBYTES('SHA1',SUBJECT)from mytable 上面的查询将散列主题列中的整行 0x0431A163506AE958501A2AA30FA12513C3CE599A 0x0431A163506AE958501A2AA30FA12513C3CE599A 0x0431A163506AE958501A2AA30FA12513C3CE599A 主题列中每个记

我有一个名为“Subject”的sql server表列

UPDATE mytable SET SUBJECT=HASHBYTES('SHA1',SUBJECT)from  mytable 
上面的查询将散列主题列中的整行

0x0431A163506AE958501A2AA30FA12513C3CE599A
0x0431A163506AE958501A2AA30FA12513C3CE599A
0x0431A163506AE958501A2AA30FA12513C3CE599A
主题列中每个记录的输出行值都相同

我将需要读取每一行并对其进行散列和更新,而不是基于冒号的散列。我如何才能做到这一点

0x0431A163506AE958501A2AA30FA12513C3CE599A
0x0431A163506AE958501A2AA30FA12513C3CE593D
0x0431A163506AE958501A2AA30FA12513C3CE592F

这假设您的主键被称为subjectID

DECLARE @currentKEY INT
DECLARE @maxKey INT

SELECT @currentKey = MIN(subjectID), @maxKey = MAX(subjectID) FROM mytable

WHILE @currentKey <= @maxKEY
BEGIN
  UPDATE myTable
  SET SUBJECT = HASHBYTES('SHA1', SUBJECT)
  WHERE subjectID = @currentKEY

  SELECT @currentKey = MIN(subjectID) FROM mytable WHERE subjectID > @currentKey
END
DECLARE@currentKEY INT
声明@maxKey INT
从mytable中选择@currentKey=MIN(主体ID),@maxKey=MAX(主体ID)
而@currentKey@currentKey
终止

如果你想把它作为一个光标,我也可以告诉你怎么做。

但是这些值不同吗?如果不同,你可能需要在subject列中包含另一个值——可能是表的主键。行不同……因此可以提供一个查询,如何循环每一行并对其进行哈希运算……我有一个名为ID..J的主列想一想。SUBJECT是什么类型的?记住HASHBYTES返回一个VARBINARY,如果SUBJECT是一个可能导致问题的NVARCHAR。要逐行执行此操作,可以使用游标或WHILE循环。WHILE循环更好。只需使用主键。NVARCHAR(255)…这里不存在哈希问题…我设法对“SUBJECT”列进行哈希“…但主题列中每行记录的输出显示相同。我需要读取每一行并对其进行散列和更新,而不是基于冒号的散列。我该怎么做呢?我的表格中的SUBJECT id=@currentKEY和HASHBYTES('SHA1',SUBJECT)如何将SUBJECT列的每一行分配给hash输入。更新了上面的代码以包含HASHBYTES('SHA1',SUBJECT)。您不能使用和HASHBYTES。。这样不行。如果我上面贴的不是你想要的,恐怕我不能正确理解你的问题。当我更新table SET hashvalue=HASHBYTES('SHA1',value)时,我会为每一行获取一个唯一的值。完全没有重复。但是,我不能用VARBINARY更新NVARCHAR,因为它会导致损坏。即使尝试将HASHBYTES的结果强制转换到NVARCHAR也不起作用。