成人在线你懂的-成人在线免费小视频-成人在线免费网站-成人在线免费视频观看-日韩精品国产一区二区-日韩精品国产一区

掃一掃
關注微信公眾號

SQL Server 2008批量刪除及插入的方法
2009-05-21   

目前的批量刪除和批量更新,很是煩人,解決方案無非三種:

  XML,SQL自定義函數split,和CLR實現(xiàn)split。這幾種都比較煩人,代碼很多,維護麻煩,很不爽。

  現(xiàn)在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] [int] NOT 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

  其中還涉及到一個權限問題,需要執(zhí)行以下代碼:

Code
  GRANT EXECUTE ON TYPE::dbo.MyType TO TestUser;

  從.net app那調用此存儲過程:

Code
  'Create a local table
  Dim table As New DataTable("temp")
  Dim col1 As New DataColumn("col1", System.Type.GetType("System.Int32"))
  Dim col2 As New DataColumn("col2", System.Type.GetType("System.String"))
  Dim col3 As New DataColumn("col3", System.Type.GetType("System.DateTime"))
  table.Columns.Add(col1)
  table.Columns.Add(col2)
  table.Columns.Add(col3)
  'Populate the table
  For i As Integer = 20 To 30
  Dim vals(2) As Object
  vals(0) = i
  vals(1) = Chr(i + 90)
  vals(2) = System.DateTime.Now
  table.Rows.Add(vals)
  Next

Code
  'Create a command object that calls the stored proc
  Dim command As New SqlCommand("usp_AddRowsToMyTable", conn)
  command.CommandType = CommandType.StoredProcedure
  'Create a parameter using the new type
  Dim param As SqlParameter = command.Parameters.Add("@MyTableParam", SqlDbType.Structured)
  command.Parameters.AddWithValue("@UserID", "Kathi")

Code
  'Set the value of the parameter
  param.Value = table
  'Execute the query
  command.ExecuteNonQuery()

  可以看到,生成的表類型的組成情況,并且居然可以給表類型建立索引,呵呵

熱詞搜索:

上一篇:SQL Server 2008中如何設置數據庫審核規(guī)范(2)
下一篇:部署虛擬局域網 做好VLAN交換機的選購

分享到: 收藏
主站蜘蛛池模板: 步步惊心剧照| 龙的传人第四季| 红岩下的追捕电视剧| 宇宙大战| 男生魔鬼训练压腿| 混凝土结构施工质量验收规范gb50204-2015 | 谢容儿| 爸爸好奇怪 电视剧| 康熙微服第二部免费版第24集| 山楂树简谱| 胃疼呕吐视频实拍| 金旭| 上海东方卫视节目表| ab变频器中文说明书| 美式禁忌2| 年轻的丝袜老师2| 张艾嘉董子健吻戏| 布衣神相国语电视剧在线看完整版| 铁血战士电影| 无锡地图高清版大图| kaylani lei| 张柏芝艳照无删减| 黄网站免费观看| 肖红| 大众故事1974意大利| 蛮荒的童话 电影| 国考岗位| 上海东方卫视节目表| 美女mm| 流萤美图| 摇曳山庄的幽灵| 暴风雨的儿女| 单相电表接线图| 人民的名义演员名单表| 简单的应急预案怎么写| 金敏喜个人简历| 敦煌夜谭在线观看| 雳剑 电视剧演员表| 房东小姐| 王牌空战| 草原大作战|