sql server 存储过程接收 DATATABLE 类型的数据怎么写
时间: 2024-02-27 09:55:52 浏览: 65
要在 SQL Server 存储过程中接收 DataTable 数据类型,需要先使用 User-Defined Table Type 创建一个用户自定义表类型,然后在存储过程中使用该类型作为输入参数。
以下是一个示例:
首先创建一个用户自定义表类型:
```sql
CREATE TYPE [dbo].[MyTableType] AS TABLE(
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL
)
```
然后,在存储过程中使用该类型作为输入参数:
```sql
CREATE PROCEDURE [dbo].[MyStoredProcedure]
@MyTable [dbo].[MyTableType] READONLY
AS
BEGIN
-- 在存储过程中可以使用 @MyTable 参数进行操作,例如:
SELECT * FROM @MyTable
END
```
在 C# 中,可以使用 DataTable 类型的数据填充 SqlParameter,并将其传递给存储过程:
```csharp
// 创建 DataTable 对象
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(1, "John");
dt.Rows.Add(2, "Mary");
// 创建 SqlParameter 参数
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@MyTable";
parameter.SqlDbType = SqlDbType.Structured;
parameter.Value = dt;
parameter.TypeName = "dbo.MyTableType";
// 执行存储过程
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand("dbo.MyStoredProcedure", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(parameter);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// 处理返回结果
}
}
```
阅读全文