亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

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

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

  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] [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

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

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中如何設置數據庫審核規范(2)
下一篇:部署虛擬局域網 做好VLAN交換機的選購

分享到: 收藏