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 循环所有数据库记录并更改列的当前值,无数据截断或丢失_Sql_Sql Server_Database_Loops_Truncate - Fatal编程技术网

Sql 循环所有数据库记录并更改列的当前值,无数据截断或丢失

Sql 循环所有数据库记录并更改列的当前值,无数据截断或丢失,sql,sql-server,database,loops,truncate,Sql,Sql Server,Database,Loops,Truncate,我想更改SQL Server数据库列,它当前是Pssn Char(9),我想它是Pssn Char(4),知道数据库包含此列中当前的数据,我想此列中的所有值都是右边的4个字符 Pssn = Right(Pssn, 4) 我需要一种方法来循环所有数据库记录并更改Pssn列的当前值,以确保没有数据丢失,然后将列类型修改为Char(4),而不是Char(9) 不要使用循环或任何其他RBAR(一行一行)方法!您可以在仅使用单个、漂亮、基于**集的SQL语句中更轻松地执行此操作 要将PSSN列更新为最右

我想更改SQL Server数据库列,它当前是
Pssn Char(9)
,我想它是
Pssn Char(4)
,知道数据库包含此列中当前的数据,我想此列中的所有值都是右边的4个字符

Pssn = Right(Pssn, 4)

我需要一种方法来循环所有数据库记录并更改
Pssn
列的当前值,以确保没有数据丢失,然后将列类型修改为
Char(4)
,而不是
Char(9)

不要使用循环或任何其他RBAR(一行一行)方法!您可以在仅使用单个、漂亮、基于**集的SQL语句中更轻松地执行此操作

要将
PSSN
列更新为最右边的4个字符,请使用此
update
语句:

UPDATE dbo.YourTable
SET Pssn = RIGHT(Pssn, 4)
当然:如果值长度超过4个字符,这些值将被截断小心-在开始此操作之前,请确保对数据进行备份

完成后,您可以轻松地更新列:

ALTER TABLE dbo.YourTable
  ALTER COLUMN Pssn CHAR(4) NULL    -- or NOT NULL - depending on what you need
你试过这个吗:

UPDATE dbo.YourTable
SET Pssn = RIGHT(Pssn, 4)

您正在使用哪个数据库?MYSQL/SQLSERVER?您说的修改列类型,是指表列类型还是结果集列?使用ALTER Table更改表列类型,使用CAST更改结果集列。是否使用SQL语句UPDATE.MySQL或SQL Server修改数据?这是怎么一回事?这是两个完全不同的Beast请注意,先生,注意刚才提出的解决方案,我不希望现有数据被截断,按照您建议的方式,先生,我需要在备份数据库上创建另一个循环来填充正确的值。@Nadanaem:,如果列的值长度超过4个字符,您想做什么?这些值都超过4个字符,9个字符长。我希望将9个字符的值替换为该值的正确4个字符。我已经解决了这个问题,我的数据库现在正是我想要的。先生,还有其他最佳实践解决方案吗@marc-s