zoukankan      html  css  js  c++  java
  • sql.表值类型

    表值类型是在sql server 2008中新加入的功能,我个人觉得确实很有用,之前从没用过,自从来到现在的公司后学到很多东西,所以和大家分享一下。

    ------建表值类型语法--------------------------

    CREATE TYPE tpTest  AS TABLE(

    name NVARCHAR(50) NULL,

    Age int NULL,

    [Address] NVARCHAR(200) NULL

    )

     

    --------最普通的用法

    DECLARE @table  dbo.tpTest

    ---------插入

    INSERT INTO @table(name,age,address)

    SELECT '小王',43,'清河'

    ---------查询

    SELECT * FROM @table

     

    --------------------------------------------------------我是华丽的分割线------------------------------------------------------------------------

    还有一种用法就是C#调用存储过程时使用,这种方法大量用于导入之类的功能实现。


     ------建表--------------------------

    CREATE TABLE TBTest (

    id INT IDENTITY(1,1) PRIMARY KEY,

    name NVARCHAR(50) NULL,

    Age int NULL,

    [Address] NVARCHAR(200) NULL

    )

    go

     

    ------建存储过程--------------------------

    CREATE PROCEDURE sp_Test_insert 

    @execelDT tpTest READONLY  

    AS 

    BEGIN

     

    -------读取表类型的值并插入到数据表中

    INSERT INTO dbo.TBTest(  name, Age, Address )

    SELECT name,Age,Address from @execelDT

     

    end

     

     

    ------------------------------------------------------C#后台代码-------------------------------------------------------------------

    static void Main(string[] args)

            {

                string connectionString = "Server=.;initial catalog=Test;user id=sa;password=sa;Connect Timeout=30";

                SqlConnection connectionObj = new SqlConnection(connectionString);  //建立连接对象

                SqlCommand sqlcom =new SqlCommand("sp_Test_insert",connectionObj);

     

                DataTable dt = new DataTable();

                dt.Columns.Add("name",typeof(string));

                dt.Columns.Add("age", typeof(int));

                dt.Columns.Add("Address", typeof(string));

     

                DataRow dr = dt.NewRow();

                dr["name"] = "张三";

                dr["age"] = 22;

                dr["Address"] = "河北";

                dt.Rows.Add(dr);

                DataRow dr2 = dt.NewRow();

                dr2["name"] = "李四";

                dr2["age"] = 33;

                dr2["Address"] = "北京";

                dt.Rows.Add(dr2);

                try

                {

                    connectionObj.Open(); //连接打开

                    /*创建SqlCommand等进行数据库操作*/

                    sqlcom.CommandType = CommandType.StoredProcedure;

     

                    SqlParameter sp = new SqlParameter("@execelDT", SqlDbType.Structured);//表值类型要用Structured

                    sp.Value = dt;

                    sqlcom.Parameters.Add(sp); 

                    int index=sqlcom.ExecuteNonQuery();

                    if (index>0)

                    {

                        Console.WriteLine("插入成功!");

                        

                    }

                    connectionObj.Close();//连接关闭

                }

                catch (Exception ex)

                {

                    

                    throw;

                }

                Console.ReadKey();

            }

     

    --------------------------------------------总结---------------------------------------------------

    表类型最大的方便是可以由DataTable直接以变量形式传入数据库。

    简化了操作大量数据到数据时复杂的分布设计。

     

    注意:表类型中的列名称和DataTable中的列名称可以不一致(但是不建议这样做),但是列的顺序和变量类别必须一致。

    用sql server profiler监视请求会发现,他只是将dataTable中的数据转换成insert语句插入到表类型中,所以与名称无关。

     

  • 相关阅读:
    接口的设置
    总结一下《vue的使用》
    标准时间对象的转换
    类数组转换为数组
    异步函数
    vue中moudles的作用及使用方法
    es5数组的新方法
    React JSX
    React更新元素 基础
    React将某段文字插入到某个元素里
  • 原文地址:https://www.cnblogs.com/stjwy/p/5922353.html
Copyright © 2011-2022 走看看