Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 server 使用强制转换覆盖现有列会生成一个重复的列值_Sql Server_Tsql - Fatal编程技术网

Sql server 使用强制转换覆盖现有列会生成一个重复的列值

Sql server 使用强制转换覆盖现有列会生成一个重复的列值,sql-server,tsql,Sql Server,Tsql,我对tsql非常陌生,我正在尝试用一个新的铸造版本字符串覆盖现有列,将其转换为数值。但是,新列在整个列中重复第一个强制转换值,而不是所有强制转换值 是什么导致了这种行为?当我单独运行子查询时,将显示所有强制转换的值 您可以使用如下所示的简单更新查询,否则您必须以这种方式使用join,这在您的情况下是没有意义的 UPDATE #temp SET [year] = CAST(CAST([year] AS int) AS varchar(30)) 更新中有2个temp实例,因此将每个值分配给更新中的

我对tsql非常陌生,我正在尝试用一个新的铸造版本字符串覆盖现有列,将其转换为数值。但是,新列在整个列中重复第一个强制转换值,而不是所有强制转换值

是什么导致了这种行为?当我单独运行子查询时,将显示所有强制转换的值


您可以使用如下所示的简单更新查询,否则您必须以这种方式使用join,这在您的情况下是没有意义的

UPDATE #temp SET [year] = CAST(CAST([year] AS int) AS varchar(30))

更新中有2个temp实例,因此将每个值分配给更新中的列year,并保留一个任意值。您需要一个。最后一行未显示在输出的屏幕截图中。我不确定这是复制错误还是查询中的某个错误,希望是复制错误。我明白了。谢谢大家@larnu虽然在新的输出中我只看到一个不同的值。但是,请注意,强制转换该值有些毫无意义。如果插入/更新具有int值的varchar列,int仍然存储为varchar。虽然这可以工作,但对数据没有任何影响。OP声明该年是一个varchar,因此将强制转换值year插入int将得到相同的值。实际上,您最终的CASTCAST[year]的int值为varchar30
UPDATE #temp SET [year] = CAST(CAST([year] AS int) AS varchar(30))