将整个数据集传递给MSSQL 2005中的存储过程

时间:2010-10-05 11:23:49

标签: asp.net sql sql-server-2005 tsql stored-procedures

如何将数据集对象传递给存储过程?数据集包含多个表,我需要能够从SQL中访问它们。

3 个答案:

答案 0 :(得分:3)

您可以使用Table值参数在SQL 2008 http://msdn.microsoft.com/en-us/library/bb675163.aspx

中传递单个表

参考本文并使用SQL CLR过程传递数据集http://blogs.msdn.com/b/jpapiez/archive/2005/09/26/474059.aspx

答案 1 :(得分:2)

看起来可以使用SQL Server 2008或更新版本(至少使用DataTable)执行此操作。以下是链接:

http://www.eggheadcafe.com/community/aspnet/10/10138579/passing-dataset-to-stored-procedure.aspx

http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

答案 2 :(得分:0)

正如MusiGenesis的article所回答的那样

  

在SQL Server 2005及更早版本中,它是   无法传递表变量   作为存储过程的参数。   当多行数据到SQL时   服务器需要发送多行   数据到SQL Server,开发人员   不得不一次发送一行或来   与其他解决方法相遇   要求。而VB.Net开发人员   最近通知我,有一个   .Net中提供的SQLBulkCopy对象   向SQL发送多行数据   服务器马上,数据仍然不能   被传递给存储过程。

此处有明显陈述的风险还有两种方法

参数化您的处理程序

如果您确实需要传递常规表变量,则可以重新评估。虽然有时无法避免这种情况,但之后添加MS SQL Server所具有的功能部分是因为通常可以通过构建存储过程和数据处理流程来解决这个问题。

如果您能够“参数化”您的过程,那么您应该能够让存储过程根据有限数量的参数检索完整数据集。

这会使流程变得不那么灵活,但它也会使它更受控制,这不是一件坏事(类似于只与存储过程层面上的应用程序接口的数据库更强大,这种方法也是如此,通过限制灵活性减少了可能的案例数量,从而减少了可能无法处理的案件数量。阅读:安全漏洞和一般漏洞)

临时表

除了上述内容之外,还总是采用临时表,这可能或多或少复杂,具体取决于您在数据上共享的范围(共享可以在数据库用户,应用用户,连接,进程等之间进行)。 )。

好的副作用是这种方法可以允许进程的持久性(这使你更接近撤消,重做和继续中断工作的能力)。