【问题标题】:modify the subsequent values of a column in sql table which already contains data修改sql表中已经包含数据的列的后续值
【发布时间】:2013-02-21 05:17:24
【问题描述】:

您好,我正在做一个项目,我必须通过单击按钮将一些值存储在数据库中。这是创建表的代码:

create table dbo.Cpecial_Partner_Info_tbl
( 
[S.No] int identity(1,1),
[Partner ID] varchar(20),
[Partner Code] varchar(20),
[Partner Name] varchar(100),
[Partner Type] varchar(15),
[User ID] varchar(50) primary key,
[Password] varchar(50),
)

在此表中,我添加了一些值。现在我的要求是 partner idpartner code 值应该来自 s.no 值。例如,如果我的 s.no 值为 '1',则 partneridparnter code 值应为'part01' 和 'pc01' 分别。我知道创建新表并使用我的条件的代码。这是我可以使用的代码:

create table dbo.Cpecial_Partner_Info_tbl
( 
[S.No] int identity(1,1),
[Partner ID] as 'PART' + right('0' + Convert(VarChar(10), [S.No]), 1) persisted,
[Partner Code] as 'PC' + right('0' + Convert(VarChar(10), [S.No]), 1) persisted,
[Partner Name] varchar(100),
[Partner Type] varchar(15),
[User ID] varchar(50) primary key,
[Password] varchar(50),
)

但是使用上面的代码意味着我必须重新创建表。所以我的问题是我可以在不重新创建表格的情况下对 partner idpartner code 应用上述条件(因为我已经在表格中有一些重要的数据) ?提前致谢

【问题讨论】:

  • 为什么要重新创建表?您可以删除两列并使用您想要的定义创建新列(请参阅ALTER TABLE),而不会影响表的其余部分。或者您的意思是您的 PartnerID 和 PartnerCode 列中的现有值不适合您的公式,但您仍然希望保留它们并且只将公式用于新行?附带说明一下,在列名中使用空格通常是个坏主意:它会在脚本和编程方面产生各种“小”问题。
  • @Pondlife 是的,这正是我想要的......即使我反对在列名中使用空格,但我的团队遵循一定的命名空间,所以我必须使用它

标签: sql sql-server sql-server-2008


【解决方案1】:

在将值插入表之前,将 slno 的最大值设置为变量并将变量设置为所有 3 列。

【讨论】:

  • 实际上我是通过 c# 将值插入到表中...所以我认为我需要创建一个存储过程来插入值。
【解决方案2】:

您可以执行以下操作来更新您的表格并保留数据: 1.创建具有相同结构的新表 2.从旧表复制数据到新表 3.禁用旧表中的所有外键 4.更新旧表 5.再次启用外键

【讨论】:

  • 如果不创建另一个表就不能这样做吗?
  • 不幸的是,这是我知道的唯一方法。抱歉回复晚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 2020-05-23
相关资源
最近更新 更多