MS SQL 常用SQL语句

测试数据库:MS SQL Server 2005

1、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 set  field3=t1.field2, field4=t1.field6 from table1 t1 where table2.field2=t1.field1 and table2.field2=2 ;

表示从table1中更新数据到符合条件的table2中,要求目标表table2必须存在,而且有符合条件的数据,当然要是没有数据或数据不对,自然不会符合条件,自然不会更新了。

具体例子参见:http://www.2cto.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' AND  COLUMNPROPERTY(     
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; 

猜你喜欢

转载自1017401036.iteye.com/blog/2100170