Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将数据表传递到存储过程中。有更好的办法吗?_Sql_Stored Procedures_Clr - Fatal编程技术网

Sql 将数据表传递到存储过程中。有更好的办法吗?

Sql 将数据表传递到存储过程中。有更好的办法吗?,sql,stored-procedures,clr,Sql,Stored Procedures,Clr,数据表能否以某种方式传递到SQLServer2005或2008 我知道seesm的标准方法是将XML传递给SP,并且可以通过某种方式将数据表轻松转换为XML 将.NET对象传递到SP怎么样?可能吗 我记得在2008年不知何故听说过SQL和CLR一起工作,但我一直不明白。。也许这意味着您可以在存储过程中引用.NET对象?您可以在SQL中创建用户定义的表类型。然后,在存储过程中,接受类型为(用户定义的表类型)的参数,并将datatable作为其值传递给存储过程 以下是以下几个例子: 在SQL中: C

数据表能否以某种方式传递到SQLServer2005或2008

我知道seesm的标准方法是将XML传递给SP,并且可以通过某种方式将数据表轻松转换为XML

将.NET对象传递到SP怎么样?可能吗


我记得在2008年不知何故听说过SQL和CLR一起工作,但我一直不明白。。也许这意味着您可以在存储过程中引用.NET对象?

您可以在SQL中创建用户定义的表类型。然后,在存储过程中,接受类型为(用户定义的表类型)的参数,并将datatable作为其值传递给存储过程

以下是以下几个例子:

在SQL中:

CREATE TYPE dbo.CategoryTableType AS TABLE
    ( CategoryID int, CategoryName nvarchar(50) )
然后:


否则,您可以选择SQl批量插入

我试过,最好的办法

enter code here

  Using dbConn As New SqlConnection(connectionStr)
                dbConn.Open()
                countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar())



                Using bulkcopy As SqlBulkCopy = New SqlBulkCopy(dbConn)
                    bulkcopy.DestinationTableName = "[dbo].[DocumentScan]"
                    Try
                        ' Write from the source to the destination.
                        bulkcopy.WriteToServer(newDataTable)

                    Catch ex As Exception
                        Console.WriteLine(ex.Message)
                    End Try
                    Dim countEnd As Long = _
                  System.Convert.ToInt32(commandRowCount.ExecuteScalar())


                End Using

这仅适用于SQL Server 2008和更新版本-在2005年不起作用:-(我们使用的是2008。我把它发给了我的老板。也许他们会听。这比从数据表中传入XML容易,对吗?很好地抓住了2005年不起作用的问题。我认为这比传入XML容易。它的另一个重要用途是当您将项目列表传入存储过程时。通常的做法是创建分隔的list的ID,然后传入并在存储过程中解析它们。使用表类型,您可以传入包含数据的表,然后像普通表一样加入到该表中。好东西。他们读了这篇文章并决定使用它。免费为我喝一杯!
enter code here

  Using dbConn As New SqlConnection(connectionStr)
                dbConn.Open()
                countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar())



                Using bulkcopy As SqlBulkCopy = New SqlBulkCopy(dbConn)
                    bulkcopy.DestinationTableName = "[dbo].[DocumentScan]"
                    Try
                        ' Write from the source to the destination.
                        bulkcopy.WriteToServer(newDataTable)

                    Catch ex As Exception
                        Console.WriteLine(ex.Message)
                    End Try
                    Dim countEnd As Long = _
                  System.Convert.ToInt32(commandRowCount.ExecuteScalar())


                End Using