VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > T-SQL >
  • sql语句大全之MSSQL 存储过程中 表值参数用法

一、SQL自定义表类型简介


1.1SQL自定义表类型简介

在SQL-server中,用户将一个表结构定义为一个新的用户类型,
并且可以将这个用户自定义类型作为 存储过程 函数 SQL语句中的参数类型


创建一个 自定义 “表类型”

CREATE TYPE [dbo].[tableTest] AS TABLE(
	[a] [varchar](30) NULL,
	[b] [varchar](100) NULL
)

注意事项:
1 表类型不能做为列定义的列类型
2 创建表类型后,不可以执行 Alter Type ,只可以进行 Create type drop type
3 创建表类型时,计算列不 可以调用用户自定义函数
4 创建表类型 不能为表类型指定默认值
5 创建表类型 禁止使用非聚集索引



1.2 SQL自定义表类型应用场景

大数据库插入
存储过程中 将常用的临时表定义为一个表类型 简化代码,使代码整齐


二、SQL自定义表类型—举例应用


2.1 存储过程调用自定义表类型

 定义存储过程
 

CREATE proc [dbo].[pr_testTableType] @keyId varchar(36), @tableInfo tableTest readOnly --- 自定义表类型必须使用readonLy as begin create table #t (keyId int identity,a varchar(200),b varchar(200)) insert into #t (a,b) select a,b from @tableInfo t select * from #t truncate table #t drop table #t end
 c# 代码调用存储过程 (采用参数化的方式发送此参数)

              DataTable tb = new DataTable();
            DataColumn a = new DataColumn("a");
            DataColumn b = new DataColumn("b");
            tb.Columns.Add(a);tb.Columns.Add(b);

            DataRow r1 =tb.NewRow();
            r1["a"] ="测试1----";
            r1["b"] ="测试2";
            
            tb.Rows.Add(r1);


            SqlParameter[] p = new SqlParameter[]{
                new SqlParameter("@keyId",System.Guid.NewGuid().ToString()),
                new SqlParameter("@tableInfo",tb)
            };
            

	 // 方法二:
         //   SqlParameter tmp =   new SqlParameter("@tableInfo",SqlDbType.Structured);
         //  tmp.SqlValue = tb;

         //  SqlParameter[] p = new SqlParameter[]{
         //       new SqlParameter("@keyId",System.Guid.NewGuid().ToString()),                
         //      tmp
         //  };


            db.ExecProcParameterReDataSet("pr_testTableType",p); 

相关教程