将特定的硬编码值添加到计算列

时间:2016-09-30 07:45:22

标签: sql-server tsql sql-server-2014 calculated-columns

是否有可能更改计算列的某些值?我们需要它,因为值连接到另一个系统,其中三个必须更改。

我们的计算列如下所示:

('Product-'+CONVERT([NVARCHAR](100),(1000)+[Id],(0)))

我现在必须将值Product-1356Product-1655Product-1701更改为Product-12Product-17Product-18(示例值)。这三个必须硬编码。其余的必须像以前一样计算。

我尝试使用T-SQL正常更新它:

UPDATE MyTable
SET ProductId = 'Product-12'
WHERE ProductId = 'Product-1356'

但现在我收到以下错误:

  

无法修改“ProductId”列,因为它是计算列或是UNION运算符的结果。

同时更新Id列无效,因为它是主键:

  

无法更新标识列'Id'。

我该怎么做?它甚至可能吗?

1 个答案:

答案 0 :(得分:2)

我能想到的两个选择:

  1. 删除这些行并使用正确的ID重新添加它们。
  2. 设置ProductIdOverride的新列并在其中放置任何硬编码ID。如果希望使用现有公式,请保留Null。然后将计算列更改为COALESCE(ProductIdOverride, ('Product-'+CONVERT([NVARCHAR](100),(1000)+[Id],(0))))