返回首页
当前位置: 主页 > 编程天地 > MySQL >

SQL 2008新功能轻松解决批量删除及插入

http://www.23itw.com时间:2008-08-12 21:58来源:作者: 点击:收藏到QQ书签
目前的批量删除和批量更新,解决方案无非三种: XML,SQL自定义函数split,和CLR实现split。现在SQL Server 2008新增的一个功能也可以实现此功能。 目前的批量
  
        目前的批量删除和批量更新,解决方案无非三种: XML,SQL自定义函数split,和CLR实现split。现在SQL Server 2008新增的一个功能也可以实现此功能。

  目前的批量删除和批量更新,解决方案无非三种:

  XML,SQL自定义函数split,和CLR实现split。这几种都比较烦人,代码很多,维护麻烦,很不爽。

  现在SQL Server 2008新增的一个功能,我也不知道中文名怎么翻译,暂且叫他表参数吧。

  大家可以看看示例:

  这个就是用户定义的表类型:

  然后给他定义一个类型:

Code
  -- ================================
  -- Create User-defined Table Type
  -- ================================
  USE Test
  GO
  -- Create the data type
  CREATE TYPE dbo.MyType AS TABLE
  (
  col1 int NOT NULL,
  col2 varchar(20) NULL,
  col3 datetime NULL,
  PRIMARY KEY (col1)
  )
  GO

  可以看到,生成的表类型的组成情况,并且居然可以给表类型建立索引,呵呵

这个是操作 表类型的脚本:

Code
  DECLARE @MyTable MyType
  INSERT INTO @MyTable(col1,col2,col3)
  VALUES (1,'abc','1/1/2000'),
  (2,'def','1/1/2001'),
  (3,'ghi','1/1/2002'),
  (4,'jkl','1/1/2003'),
  (5,'mno','1/1/2004')
  SELECT * FROM @MyTable

  下面演示如何将表参数作为一个存储过程参数传递,以及ADO.NET的代码

  sql部分:

Code
  USE [Test]
  GO
  CREATE TABLE [dbo].[MyTable] (
  [col1] [intNOT NULL PRIMARY KEY,
  [col2] [varchar](20) NULL,
  [col3] [datetime] NULL,
  [UserID] [varchar] (20) NOT NULL
  )
  GO
  CREATE PROC usp_AddRowsToMyTable @MyTableParam MyType READONLY,
  @UserID varchar(20) AS
  INSERT INTO MyTable([col1],[col2],[col3],[UserID])
  SELECT [col1],[col2],[col3],@UserID
  FROM @MyTableParam
  GO

  如何在sql中调用此存储过程:

Code
  DECLARE @MyTable MyType
  INSERT INTO @MyTable(col1,col2,col3)
  VALUES (1,'abc','1/1/2000'),
  (2,'def','1/1/2001'),
  (3,'ghi','1/1/2002'),
  (4,'jkl','1/1/2003'),
  (5,'mno','1/1/2004')
  EXEC usp_AddRowsToMyTable @MyTableParam = @MyTable, @UserID = 'Kathi'
  SELECT * FROM MyTable

足球平台出租 1stmls.com

顶一下
(2)
66.7%
踩一下
(1)
33.3%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容