SQL Server中一些有用的日期sql语句

合每行中的数据数量、 数据类型和排列顺序也必须与表中所定义列或 column_list 参数中指定列的数
量、数据类型和排列顺序完全相同。
SQL Server为INSERT语句提供的第四种数据插入方式是通过执行系统存储过程,其数据来自于过程
执行后所产生的结果集合。所执行的过程可以为存储过程、系统存储过程或扩展存储过程,它们既可以
为本地存储过程,又可以是远程服务器上的存储过程,只要用户具有它们的执行权限即可。有关存储过
程请参阅对应的内容。
table_source说明INSERT语句插入数据时所操作的表或视图,其语法格式可简单书写为:
{table_name [[AS] table_alias]
| view_name [[AS] table_alias]
}
table_name和view_name说明被插入数据的表或视图名称,table_alias参数为表或视图设置别名。
使用别名有两方面原因:第一、当表或视图名称较长时,使用别名可以简化书写工作;第二,在自连接
或子查询中,使用别名可以区别同一个表或视图。
在向表中插入数据时, 如果所插入的数据与约束或规则的要求冲突, 或是它们的数据类型不兼容
时,将导致INSERT 语句执行失败。当使用SELECT或EXECUTE子句向表中一次插入多行数据时,如果其中
有任一行数据有误,它将导致整个插入操作失败,使SQL Server停止所有数据行的插入操作。
例一、使用数值列表方式( 假定 usertable 表中只定义了name、age和sex字段,且name、sex均为
char类型,age为int类型)。
INSERT usertable
VALUES ('张三','女',18)
例二、使用列名列表方式
INSERT usertable (age,name)
VALUES (18,'张三')
例三、在数值列表中,还可以将变量的值插入到表中。在使用变量为列提供数据时,应保证变量的
数据类型与列数据类型相同,或是可以自动将它们转换为相同的数据类型。例如:
DECLARE @name char(16)
SET @name='张三'
INSERT usertable
VALUES (@name,DEFAULT,20)
本例中Asp中是这样的:
dim name
name="张三"
sqlstr="INSERT usertable VALUES ('"&name&"','女',20)"
……
例四、将SELECT子句的所返回的结果集合插入到表中。例如:
INSERT usertable (name,sex,age)
SELECT 's'+name,sex,age
FROM usertable
WHERE name like '张%%'
二、修改数据
Transact-SQL中的UPDATE语句用于修改表中数据,该语句的语法格式为:
UPDATE ()
SET (
column_name={expression | DEFAULT }
| @variable = expression
} [,…n]
[FROM
{
| (select_statement) [AS] table_alias [,…m]) ]
}
[,…n]
]
[WHERE
| CURRENT OF ({[GLOBAL] cursor_name } | cursor_variable_name} }
]
别看写了一大堆,最常用的只是下列格式:
UPDATE table_name
SET column_name1=variable1,column_name2=variable2
WHERE search_conditions
其中table_or_view参数指出待修改的表或视图名称,其格式与INSERT语句中该参数的格式相同。
SET子句指出表中被修改的列或变量,以及它们的新值。column_name为被修改的列名,@variable
为一个已经声明的局部变量名称,它们修改后的值由expression表达式提供,或使用DEFAULT关键字将
默认值赋给指定列。
FROM子句引出另一个表,它为UPDATE语句的数据修改操作提供条件。
WHERE子句中的search_conditions 参数说明UPDATE语句的修改条件,它指出表或视图中的哪些行
需要修改。省略WHERE子句时,说明对指定的表或视图中的所有行进行修改!!!!
WHERE子句中的CURRENT OF说明在游标的当前位置处执行修改操作,游标由curror_name 或游标变
量cursor_variable_name指定。
UPDATE不能修改具有IDENTITY属性列的列值。
例一、将usertable表中所有人员的性别改为'男'
UPDATE usertable
SET sex='男'
例二、将性别为null的所有人员的性别改成'男'
UPDATE usertable
SET sex='男'
WHERE sex IS NULL
例三、将所有姓名为null的人员的姓名改为'张三'、性别改为'女',年龄改为18
UPDATE usertable
SET name='张三',sex='女',age=18
WHERE name IS NULL
三、删除数据
Transact-SQL中,DELETE和TRUNCATE TABLE语句均可以删除表中的数据。DELETE语句的语法格式为:
DELETE
{table_name | view_name}
FROM
{
| (select_statement) [AS] table_alias [(column_alias [,…m])]
}[,…n]
[WHERE
{
|{ [CURRENT OF {{[global] cursor_name}
|cursor_variable_name
}
DELETE语句的结构与UPDATE语句有些类似,其中也包含FROM子句和WHERE子句。WHERE子句为数据删
除指定条件。不使用WHERE子句时,DELETE语句将把有或视图中所有的数据删除。FROM子句是Transact-
SQL在ANSI基础上对DELETE语句的扩展,它指定要连接的表名,提供与相关子查询相似的功能。
TRUNCATE TABLE语句语法格式为:
TRUNCATE TABLE table_name
TRUNCATE TABLE语句删除指定表中的所有数据行,但表结构及其所有索引继续保留,为该表所定义
约束、规则、默认和触发器仍然有效。如果所删除表中包含有IDENTITY列,则该列将被复位到其原始基
值。使用不带WHERE子句的DELETE语句也可以删除表中所有行,但它不复位IDENTITY列。
与DELETE语句相比,TRUNCATE TABLE语句的删除速度更快。因为DELETE语句在每删除一行时都要把
删除操作记录到日志中,而TRUNCATE TABLE语句则是通过释放表数据页面的方法来删除表中数据,它只
在释放页面做一次事务日志记录。所以使用TRUNCATE TABLE语句删除数据后,这些行是不可恢复的,而
DELETE操作则可回滚,能够恢复原来数据。
因为TRUNCATE TABLE语句不做操作日志,它不能激活触发器,所以TRUNCATE TABLE语句不能删除一
个被其它表通过FOREIGN KEY约束所参照的表。
例一、使用DELETE语句删除usertable表中name为'张三'的数据行
DELETE usertable
WHERE name='张三'
例二、下面使用FROM子句和WHERE子句指定条件,然后从TB_update表中删除数据
DELETE TB_update

Technorati 标签: SQL


FROM TB_constraint AS a,TB_update AS b
WHERE a.name=b.name
AND a.country='China'
DELETE TB_update
FROM (SELECT * FROM TB_constraint
WHERE country='USA') AS a
WHERE a.name=TB_update.name

</DIV>

posted on 2009-11-13 21:01  jay.windows  阅读(1090)  评论(0编辑  收藏  举报

导航