SQLServer 2008中SQL增强之一:Values新用途

代码如下:

Create table Demo_Values
(PKID int not null identity(1,1) primary key
,DName Nvarchar(20) null
,DCode NVarchar(30) null
,DDate datetime null
)
go

--this SQL is only for SQL Server 2008
Insert into Demo_Values
(DName,DCode,DDate)
values
('DemoA','AAA',GETDATE()),
('DemoB','BBB',GETDATE()),
('DemoC','CCC',GETDATE()),
('DemoD','DDD',GETDATE()),
('DemoE','EEE',GETDATE())

--(5 row(s) affected)

除了可以一次性插入多行,values还有更巧妙的用法,不使用永久表或临时表而表示一个结果集,而且不需要函数或表变量。看下面的例子: 


代码如下:

--this SQL is only for SQL Server 2008
select DName,DCode,DDate
from
(values
('DemoA','AAA',GETDATE()),
('DemoB','BBB',GETDATE()),
('DemoC','CCC',GETDATE()),
('DemoD','DDD',GETDATE()),
('DemoE','EEE',GETDATE())
)
Demo_Values (DName,DCode,DDate)
--(5 row(s) affected)

/*
DName DCode DDate
DemoA AAA 2010-10-12 20:37:45.500
DemoB BBB 2010-10-12 20:37:45.500
DemoC CCC 2010-10-12 20:37:45.500
DemoD DDD 2010-10-12 20:37:45.500
DemoE EEE 2010-10-12 20:37:45.500
*/

注意该语句的最后一行定义了“源”名称和列名,其中列名用于select语句。

本人来自 cnblogs 邀月 3w@live.cn

(0)

相关推荐

  • SQLServer 2008中SQL增强之二 Top新用途

    一.TOP替代Set RowCount 在SQL Server 2005之前的传统SQL语句中,top语句是不支持局部变量的.见http://www.jb51.net/article/27089.htm此时可以使用Set RowCount,但是在SQL Server 2005/2008中,TOP通常执行得更快,所以应该用TOP关键字来取代Set RowCount. 复制代码 代码如下: /***************创建测试表********************* ************

  • SQLServer 2008中SQL增强之一:Values新用途

    复制代码 代码如下: Create table Demo_Values (PKID int not null identity(1,1) primary key ,DName Nvarchar(20) null ,DCode NVarchar(30) null ,DDate datetime null ) go --this SQL is only for SQL Server 2008 Insert into Demo_Values (DName,DCode,DDate) values ('D

  • SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Update,Delete)

    SQL Server 2008提供了一个增强的SQL命令Merge,用法参看MSDN:http://msdn.microsoft.com/zh-cn/library/bb510625.aspx 功能:根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步. 我们看一个例子,假如,有一总产品列表,一个分店产品列表,需要从分店添加产品时更新总产品列表. 总产品表,分店产品表结构完全一致: 复制代码 代码如下: if

  • SQLServer 2008中的代码安全(一) 存储过程加密与安全上下文

    <一>存储过程加密 其实,用了这十多年的SQL server,我已经成了存储过程的忠实拥趸.在直接使用SQL语句还是存储过程来处理业务逻辑时,我基本会毫不犹豫地选择后者. 理由如下: 1.使用存储过程,至少在防非法注入(inject)方面提供更好的保护.至少,存储过程在执行前,首先会执行预编译,(如果由于非法参数的原因)编译出错则不会执行,这在某种程度上提供一层天然的屏障. 我至今还记得大约八.九年前采用的一个权限控制系统就是通过拼凑一个SQL语句,最终得到了一个形如" where

  • SQLServer 2008中的代码安全(五) 非对称密钥加密

    非对称密钥包含数据库级的内部公钥和私钥,它可以用来加密和解密SQL Server数据库中的数据,它可以从外部文件或程序集中导入,也可以在SQL Server数据库中生成.它不像证书,不可以备份到文件.这意味着一旦在SQL Server中创建了它,没有非常简单的方法在其他用户数据库中重用相同的密钥.非对称密钥对于数据库加密属于高安全选项,因而需要更多的SQL Server资源. 我们看一组例子: 示例一.创建非对称密钥 创建非对称密钥使用如下命令: CREATE ASYMMETRIC KEY  创

  • SQLServer 2008中的代码安全(四) 主密钥

    如下图: 1.服务器主密钥(Service Master Key),位于层次结构的最顶端,并且在安装SQL Server时自动创建,用于加密系统数据.链接的服务器登录名以及数据库主密钥.在第一次通过SQL Server使用服务主密钥来加密证书.数据库主密钥或链接的服务器主密码时,服务主密钥会自动生成,并且使用SQL Server服务账户的Windows证书来生成它.如果必须改变SQL Server服务账号,微软建议使用SQL Server配置管理器,因为这个工具将执行生成新服务主密钥需要的合适的

  • SQLServer 2008中的代码安全(七) 证书加密

    证书同时包含公钥和密钥,前者用来加密,后者解密.SQL Server可以生成它自己的证书,也可以从外部文件或程序集载入.因为可以备份然后从文件中载入它们,证书比非对称密钥更易于移植,而非对称密钥却做不到.这意味着可以在数据库中方便地重用同一个证书. 注意:证书和非对称密钥同样的消耗资源. 我们看一组例子: 示例一.创建数据库证书 创建数据库证书:CREATE SYMMETRIC KEY  (http://msdn.microsoft.com/en-us/library/ms187798.aspx

  • SQL Server 2008中SQL查询语句字段值不区分大小写的问题解决

    一.问题 最近在一个系统的对外接口中,经过测试人员测试,发现登录接口中输入的用户名不区分大小写,经过排查找原因,原来是由于数据库忽略了大小写. 二.解决办法 Select * from Base_UserInfo where User_Account='Admin' COLLATE Chinese_PRC_CS_AI; 1.数据库设置排序规则,如下图所示: 2.SQL语句设置,如下: alter database 你的数据库名 COLLATE Chinese_PRC_CS_AI; 3.字段级设置

  • SQLServer 2008中通过DBCC OPENTRAN和会话查询事务

    要找到最早的活动事务,可以使用DBCC OPENTRAN命令.详细用法见MSDN:http://msdn.microsoft.com/zh-cn/library/ms182792.aspx 给出一个示例: 复制代码 代码如下: CREATE TABLE T_Product(PKID int, PName Nvarchar(50)); GO BEGIN TRAN INSERT INTO T_Product VALUES (101, '嫦娥四号'); GO DBCC OPENTRAN; ROLLBA

  • SQL Server 2008中SQL之WaitFor使用介绍

    看MSDN:http://msdn.microsoft.com/zh-cn/library/ms187331.aspx 语法为: WAITFOR { DELAY 'time_to_pass' | TIME 'time_to_execute' | [ ( receive_statement ) | ( get_conversation_group_statement ) ] [ , TIMEOUT timeout ]} 以下示例在晚上 10:20 (22:20) 执行存储过程 sp_update_

随机推荐