【问题标题】:Loop all database records and change the current values of a column, no data truncate or loss循环所有数据库记录并更改列的当前值,没有数据截断或丢失
【发布时间】:2015-01-15 11:16:08
【问题描述】:

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

Pssn = Right(Pssn, 4)

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

【问题讨论】:

  • 您使用的是哪个数据库? MYSQL/SQLSERVER ?
  • 你说修改列类型,是表列类型,还是结果集列?使用 ALTER TABLE 更改表列类型,使用 CAST 更改结果集列。您使用 SQL 语句 UPDATE 修改数据。
  • MySQL 还是 SQL Server?它是什么?这是两种截然不同的野兽
  • 请先生注意刚刚提出的解决方案

标签: sql sql-server database loops truncate


【解决方案1】:

不要使用循环或任何其他 RBAR(逐行痛苦)方法!您可以在仅使用单个、漂亮、基于 **set 的 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

【讨论】:

  • 这个想法是我不希望现有数据被截断,按照您建议的方式,先生,我需要在备份数据库上创建另一个循环来填充正确的值。
  • @NadaNaeem:好吧,如果列的值超过 4 个字符,你想做什么??
  • 这些值都超过 4 个字符,9 个字符。我希望将 9 个字符的值替换为它自己的值的右 4 个字符。我已经解决了这个问题,我的数据库现在正是我想要的。
  • 先生,还有其他最佳实践解决方案吗? @marc-s
【解决方案2】:

你试过了吗:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多