逗号分隔的列修复

Lum*_*mpy 5 sql-server-2008-r2

在我目前的工作地点,有人决定将 ID 放入逗号分隔的列中。我希望将这些分解为适当的多对多关系。然而; 引用此数据的应用程序不会立即更改。所以我需要修改一个视图以仍然显示逗号分隔的列。设置视图以显示逗号分隔列的最佳方法是什么?有没有一种不涉及离开原始列的方法?

表定义的精简版本如下。

ID
ProductName
FeatureIDs

ID     ProductName    FeatureIDS
1      Hot dog        1,5,4
2      Hamburger      1,3
3      Fish           2

ID
FeatureName

ID     FeatureName
1      Mayo
2      TarTar Sauce
3      Pickle
4      Relish
5      Onion
Run Code Online (Sandbox Code Playgroud)

最终我想将这些组合成一个单一的产品表和多对多的关系

ID 产品名称 产品类型

其中产品类型将是“产品”或“功能”

ID productid featureid

对于映射表。

是的,设置的视图需要是可更新的视图。

Aar*_*and 1

该视图可以执行类似这样的操作(显然我已经猜测了表/列名称):

CREATE VIEW dbo.whatever
AS
  SELECT src.columns /*...*/ , IDList = STUFF((SELECT ',' + CONVERT(VARCHAR(12), p.ID)
    FROM dbo.ProperRelationalTable AS p
    WHERE p.EntityID = src.EntityID
    FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 1, '')
  FROM dbo.SourceTable AS src;
Run Code Online (Sandbox Code Playgroud)

然而,正如 @Martin 在评论中指出的那样,如果该视图希望针对视图而不是基表执行任何 DML,则该视图将破坏应用程序。您可以按照他的解释通过设置INSTEAD OF触发器来避免此问题。

除了演示方面之外,相关帖子可能在其他方面也有用:

http://www.mssqltips.com/sqlservertip/2074/make-your-sql-server-database-changes-backward-兼容-when-chang-a-relationship/