将值数组发送到存储过程的最佳方法

时间:2009-03-10 14:10:44

标签: stored-procedures

我应该使用CSV字符串,XML字符串还是......?

6 个答案:

答案 0 :(得分:2)

哪个数据库和版本?使用SQL Server 2008,您可以使用表值参数。 2005年,不是那么多。

答案 1 :(得分:2)

这实际上取决于您使用的是哪个数据库。

MS SQL 2005将XML数据类型引入Microsoft平台。 Oracle9i引入了XMLTYPE。 MySql还具有诸如ExtractValue和UpdateXML之类的XML函数。 MS SQL 2008具有表值参数,允许您以表格格式传递数据。

问题实际上归结为您希望如何使用这些值。你是把它们分开存放在一张桌子里还是想存放整个blob?

如果撕开并且只有几个值,我建议使用常规字符串解析或表值参数。否则做XML。

请记住,SQL(无论风格如何)并不适合字符串解析。因此,如果你走这条路,你可以在数据库中创建一个帮助函数(CLR,UDF等)来为你处理它。

答案 2 :(得分:0)

我通常使用CSV字符串,因此我不会超过varchar字段的最大长度。为此目的,XML似乎有点罗嗦。

答案 3 :(得分:0)

有这样的特定API ...在Java中,您可以使用对象准备语句并指定数据库类型,JDBC将处理转换。 无论如何,这是特定于供应商的。 我不建议使用任何一种建议的技术,因为它们“隐藏”具有危险副作用的参数类型。

答案 4 :(得分:0)

在2005/2000中,我们必须创建一个Xml字符串,并使用Xml Parser(2005)解析它或者在2000年滚动我们。不是很好,但它完成了工作。

  <ArrayOfGuid><Guid></Guid></ArrayOfGuid>

答案 5 :(得分:0)

每当我必须将数组发送到sproc时,我通常会后退并考虑“为什么?”。通常我能够将一些其他标准发送到sproc,这将允许sproc生成正确的结果而无需数组。

有些情况下,我最终必须传递数组,在这些情况下,我发现传递xml在mssql中工作正常。