微軟SQL Server 2008之行值構造器_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:Sql語句密碼驗證的安全漏洞
      Sql語句作為國際標準的數據庫查詢語句,在各種編程環境中得到了廣泛的應用。作為一個成熟、穩定的系統,用戶登陸和密碼驗證是必不可少的。 Sql語句作為國際標準的數據庫查詢語句,在

      相信大家都知道怎樣使用數據操作語言(DML)對SQL Server表的數據進行插入、刪除和更新等處理。有時候,我們需要用INSERT語句進行插入的數據實在是多得讓人頭疼,有很多傳統但繁瑣的方法可以用來插入大批量數據,不過SQL Server 2008提供了一種能夠簡化數據插入過程的新方法。本文將為大家簡單介紹這些用來插入數據的方法之間的差異,其中包括SQL Server 2008提供的新方法——行值構造器(Row Value Constructor)。

      我們向表插入數據的傳統方法有三個,介紹如下:

      方法一

      假設我們有一個名為MyTestDB的數據庫,其中有一個名為MyTest1的表,數據庫和表的創建過程如下:

      USE [master]
      GO
      IF EXISTS (SELECT name FROM sys.databases
      WHERE name = N'MyTestDB')
      DROP DATABASE [MyTestDB]
      GO
      Create database MyTestDB
      Go
      Use [MyTestDB]
      Go
      IF EXISTS (SELECT * FROM sys.objects
      WHERE object_id = OBJECT_ID(N'[dbo].[MyTest1]')
      AND type in (N'U'))
      DROP TABLE [dbo].[MyTest1]
      GO
      USE [MyTestDB]
      GO
      SET ANSI_NULLS ON
      GO
      SET QUOTED_IDENTIFIER ON
      GO
      SET ANSI_PADDING ON
      GO
      CREATE TABLE [dbo].[MyTest1](
      [Id] [int] NULL,
      [Fname] [varchar](100) NULL,
      [Lname] [varchar](100) NULL,
      [salary] [money] NULL
      ) ON [PRIMARY]
      GO
      SET ANSI_PADDING OFF
      GO


      現在我們用傳統的ANSI插入語句向上表添加5行數據,這里需要用到帶VALUE從句的INSERT SQL語句來插入數據,腳本如下:

      insert into MyTest1 (id ,fname ,lname , salary) values (1 , 'John' , 'Smith' , 150000.00)

      insert into MyTest1 (id ,fname ,lname , salary) values (2 , 'Hillary' , 'Swank' , 250000.00)

      insert into MyTest1 (id ,fname ,lname , salary) values (3 , 'Elisa' , 'Smith' , 120000.00)

      insert into MyTest1 (id ,fname ,lname , salary) values (4 , 'Liz' , 'Carleno' , 151000.00)

      insert into MyTest1 (id ,fname ,lname , salary) values (5 , 'Tony' , 'Mcnamara' , 150300.00)

      執行結果如下:

      (1 row(s) affected)

      (1 row(s) affected)

      (1 row(s) affected)

      (1 row(s) affected)

      (1 row(s) affected)

      方法二

      假設我們在上述的MyTestDB數據庫中有表MyTest2,如下:

      USE [MyTestDB]
      GO
      SET ANSI_NULLS ON
      GO
      SET QUOTED_IDENTIFIER ON
      GO
      SET ANSI_PADDING ON
      GO
      IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTest2]')

      AND type in (N'U'))
      DROP TABLE [dbo].[MyTest2]
      GO
      CREATE TABLE [dbo].[MyTest2](
      [Id] [int] NULL,
      [Fname] [varchar](100) NULL,
      [Lname] [varchar](100) NULL,
      [salary] [money] NULL
      ) ON [PRIMARY]
      GO
      SET ANSI_PADDING OFF
      GO

      下面我們再用另外一種傳統的插入方法同樣添加5行數據,也就是使用帶SELECT從句的INSERT SQL語句,腳本如下:

      insert into MyTest2 select 1 , 'John' , 'Smith' , 150000.00

      insert into MyTest2 select 2 , 'Hillary' , 'Swank' , 250000.00

      insert into MyTest2 select 3 , 'Elisa' , 'Smith' , 120000.00

      insert into MyTest2 select 4 , 'Liz' , 'Carleno' , 151000.00

      insert into MyTest2 select 5 , 'Tony' , 'Mcnamara' , 150300.00

      執行結果如下:

      (1 row(s) affected)

      (1 row(s) affected)

      (1 row(s) affected)

      (1 row(s) affected)

      (1 row(s) affected)

      方法三

      同樣的,我們再假設上述的MyTestDB數據庫中有表MyTest3,如下:

      USE [MyTestDB]
      GO
      IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTest3]')

      AND type in (N'U'))
      DROP TABLE [dbo].[MyTest3]
      GO
      USE [MyTestDB]
      GO
      SET ANSI_NULLS ON
      GO
      SET QUOTED_IDENTIFIER ON
      GO
      SET ANSI_PADDING ON
      GO
      CREATE TABLE [dbo].[MyTest3](
      [Id] [int] NULL,
      [Fname] [varchar](100) NULL,
      [Lname] [varchar](100) NULL,
      [salary] [money] NULL
      ) ON [PRIMARY]
      GO
      SET ANSI_PADDING OFF
      GO

      下面我們用第三種傳統的插入方法同樣添加5行數據,這里使用的是帶SELECT從句和UNION從句的INSERT SQL語句,腳本如下:

      insert into MyTest3

      select 1 , 'John' , 'Smith' , 150000.00

      union select 2 , 'Hillary' , 'Swank' , 250000.00

      union select 3 , 'Elisa' , 'Smith' , 120000.00

      union select 4 , 'Liz' , 'Carleno' , 151000.00

      union select 5 , 'Tony' , 'Mcnamara' , 150300.00

      執行結果如下:

      (5 row(s) affected)

      方法四

      最后一種方法,需要插入數據的對象是MyTestDB數據庫中的表MyTest4,如下:

      USE [MyTestDB]
      GO
      IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTest4]')

      AND type in (N'U'))
      DROP TABLE [dbo].[MyTest4]
      GO
      USE [MyTestDB]
      GO
      SET ANSI_NULLS ON
      GO
      SET QUOTED_IDENTIFIER ON
      GO
      SET ANSI_PADDING ON
      GO
      CREATE TABLE [dbo].[MyTest4](
      [Id] [int] NULL,
      [Fname] [varchar](100) NULL,
      [Lname] [varchar](100) NULL,
      [salary] [money] NULL
      ) ON [PRIMARY]
      GO
      SET ANSI_PADDING OFF
      GO

      現在我們要用到SQL Server 2008中提供的新方法——行值構造器的插入SQL語句為上述表插入5行數據,這種方法可以在一個INSERT語句中一次性插入多行數據,腳本如下:

      insert into MyTest4 (id ,fname ,lname , salary) values


      (1 , 'John' , 'Smith' , 150000.00),

      (2 , 'Hillary' , 'Swank' , 250000.00),

      (3 , 'Elisa' , 'Smith' , 120000.00),

      (4 , 'Liz' , 'Carleno' , 151000.00),

      (5 , 'Tony' , 'Mcnamara' , 150300.00)

      執行結果如下:

      (5 row(s) affected)

      分享:用sp_lock診斷SQL Sever的性能問題
      在IT 專家中有一種普遍的誤解,就是認為“鎖定是不好的東西”,你必須盡一切可能保證數據庫鎖定不會使得進程無法正常運行。為了能夠確保一個一致的數據庫環境,在對資源進行修改時,

      來源:模板無憂//所屬分類:Mssql數據庫教程/更新時間:2008-08-22
      相關Mssql數據庫教程