注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Windows >> 服务器技术 >> SQL Server >> Windows正文

SQL Server 2008之行值构造器

文章来源:中国IT实验室收集整理 作者:佚名 更新时间:2008-5-25 3:12:09 【 】 【加入收藏

    相信大家都知道怎样使用数据操作语言(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)

 

  • 上一篇Windows:

  • 下一篇Windows:
  • 最 新 热 门
     2007年7-12月微软安全情报报告发布
     Windows “Fiji” Beta测试已经开始
     微软将在Office 2007 SP2中支持ODF和PDF
     微软真的放弃Vista用Windows 7取而代之
     更新XP SP3会损坏Windows注册表
     安全厂商再抛证据:Vista不安全64%染病毒
     惠普确认失误导致安装SP3不断重启
     OLPC版Windows XP只要3美元
     微软和OLPC宣布OLPC XO采用Windows XP
     Windows7发布日期之计算法
    最 新 推 荐
     从IIS到SQL Server数据库安全
     SQL Server不存在或拒绝访问故障的排除
     在PL/SQL应用程序中缓存图片
     SQL Server事务日志的几个常用操作
     SQL Server 2008数据库TDE压缩加密篇
     SQL Server 2008之行值构造器
     SQL Server中数据导入导出三种方法
     使用SQL Server 2008进行预测分析
     SQL Server 2008分析服务概览
     在SQL Server 2008中运用表值参数
    相 关 文 章

    从IIS到SQL Server数据库安全
    SQL Server不存在或拒绝访问故障的排除
    在PL/SQL应用程序中缓存图片
    SQL Server事务日志的几个常用操作
    SQL Server 2008数据库TDE压缩加密篇
    SQL Server中数据导入导出三种方法
    使用SQL Server 2008进行预测分析
    SQL Server 2008分析服务概览
    在SQL Server 2008中运用表值参数
    XP下安装Apache2 PHP5 MYSQL5 Zend

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用