MS SQL 常用SQL语句
测试数据库:MS SQL Server 20051、insert into select语句:
语句形式:insert into Table2(field1,field2,...) select value1,value2,... from Table1 where table1.......
表示从table1中复制符合条件的数据到table2中,要求目标表table2必须存在,若不存在则会报错。这个语句除了插入源表table1的字段外,还可以插入常量。
具体例子参见:http://www.cnblogs.com/freshman0216/archive/2008/08/15/1268316.html
2、select into from 语句:
语句形式:select vale1, value2 into Table2 from Table1 where field1......
表示从table1中复制符合条件的数据到table2中,要求目标表table2不存在,因为在插入数据时会自动创建table2。
具体例子参见:http://www.cnblogs.com/freshman0216/archive/2008/08/15/1268316.html
3、update select 语句:
语句形式:update table2 set table2.field...=table1.field... ,table2.field...=table1.field........ from table1 where table2.field...=table1.field...
简单例子:
update table2 setfield3=t1.field2, field4=t1.field6 from table1 t1 where table2.field2=t1.field1 and table2.field2=2 ;
表示从table1中更新数据到符合条件的table2中,要求目标表table2必须存在,而且有符合条件的数据,当然要是没有数据或数据不对,自然不会符合条件,自然不会更新了。
具体例子参见:http://www.iyunv.com/database/201208/148251.html
下面这个是上一个链接中官员关于update的:
个人感觉MS SQL Server的Update语法功能更为强大。MS SQL SERVER的写法:
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID
个人觉得这个是有问题的。我最开始是按照这个方法写的,报错,后来调整成上面的形式了,反而成功了。
4、查看(获取)当前数据库所有触发器信息:
SELECT
object_name(a.parent_obj) as [表名]
,a.name as triggerName
,(case when b.is_disabled=0 then '启用' else '禁用' end) as [状态]
,b.create_date as [创建日期]
,b.modify_date as [修改日期]
,c.text as [触发器内容]
FROM sysobjects a
INNER JOIN sys.triggers b
ON b.object_id=a.id
INNER JOIN syscomments c
ON c.id=a.id
WHERE a.xtype='tr'
ORDER BY [表名]
实例:查看物理表table1的触发器信息
SELECT
object_name(a.parent_obj) as tableName
,a.name as triggerName
,(case when b.is_disabled=0 then '启用' else '禁用' end) as status
,b.create_date as createDate
,b.modify_date as modifyDate
,c.text as triggerText
FROM sysobjects a
INNER JOIN sys.triggers b
ON b.object_id=a.id
INNER JOIN syscomments c
ON c.id=a.id
WHERE a.xtype='tr' and (a.parent_obj=object_id('table1'))
ORDER BY tableName
a、获取当前表的触发器信息:EXEC sp_helptrigger '表名'
b、获取指定触发器的信息:EXEC sp_help '触发器名'
c、获取指定触发器的内容:EXEC sp_helptext '触发器名'
5、查看/获取某个表的主键信息:
a、查看可以用sp_pkeys存储过程,如:exec sp_pkeys 'table2',可以得到:当前表的Table_qualifier(数据库名称)、Table_owner(所有者)、Table_name(表名)、Column_name(主键所在列名)、Key_seq(主键序列)、PK_name(主键名称)
b、获取主键信息:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME='TABLE2' ANDCOLUMNPROPERTY(
OBJECT_ID('表名'),COLUMN_NAME,'IsIdentity')=1
6、判断物理表/临时表是否存在:
--物理表
if object_id(N'表名',N'U') is not null
print '存在'
else
print '不存在'
--临时表
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#临时表名'))
PRINT '存在'
ELSE
PRINT'不存在'
7、重命名列名:
exec sp_rename '表名.老的字段','新的字段','column';
--警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
示例:将table1的field1字段名修改为field10(执行该SQL时会发出警告,但只要不是错误一样会执行)
exec sp_rename 'table1.field1','field10','column';
8、重命名表名:
EXECUTE sp_rename N'老的表名', N'新的表名', 'OBJECT'
--警告: 更改对象名的任一部分都可能会破坏脚本和存储过程。
示例:将table1表名修改为table2
--直接执行SQL语句
EXECUTE sp_rename N'table1', N'table2', 'OBJECT'
--老的表名和新的表名是变量时,需要拼接SQL语句
declare @oldTableName varchar(100);
declare @newTableName varchar(200)
declare @sql varchar(100);
set @oldTableName ='table1';
set @newTableName ='table2';
set @sql = 'EXECUTE sp_rename N'''+@oldTableName+''', N'''+@newTableName+''', ''OBJECT'' ';
print @sql;
exec @sql;
页:
[1]