存储过程中的数组

时间:2011-07-03 16:53:07

标签: sql sql-server-2008 database-design

我知道这个问题已被多次询问,但我不是SQL的PRO,所以我需要一些帮助。

我有两张桌子 - PersonContactNumber。一个人可以拥有许多联系号码,每次我进行保存时都需要将所有联系号码插入ContactNumber表。我正在考虑有一个联系号码的数组/集合,Person id将在我插入时自动生成。

我正在寻求帮助的是,我该如何实现?我在网上找到的解决方案都使用XML /字符串分隔符,但我认为在我的情况下它不起作用。或者它可以,但我不确定如何将其纳入我的代码。

如果有人有解决方案,请发布代码。

提前致谢

2 个答案:

答案 0 :(得分:2)

你有一张桌子" ContactNumber"这是" Person"的孩子。也就是说,您不能将它们存储为CSV,XML或其他任何内容。每个数字一行。

简单示例

人。主键是PersonID
PersonID, Firstname, Lastname, Gender, ...

NumberType。主键是NumberType。存储诸如" Mobile"," Home"等
NumberTypeID, NumberType

ContactNumbers。主键是PersonID,NumberType
您有Person和NumberType的外键 PersonID, NumberTypeID, PhoneNumber

评论后编辑:

使用SQL Server 2008,您可以使用表值参数将数组发送到SQL Server。最全面的文章是Erland Sommarskog的"Arrays and Lists in SQL Server 2008"

另外,不要使用@@ IDENTITY:SCOPE_IDENTITY()更安全

答案 1 :(得分:0)

这将涉及客户端和服务器上都存在的CLR用户定义类型。

另见SQL Server CLR Stored Procedure JSON Parameter

警告:这是数据库中新的OOP / CLR支持,并不是标准的SQL服务方式​​。