设为首页 收藏本站
查看: 1113|回复: 0

[经验分享] MS SQL 常用SQL语句

[复制链接]

尚未签到

发表于 2016-11-7 01:43:45 | 显示全部楼层 |阅读模式
  测试数据库: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.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' 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;

  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296550-1-1.html 上篇帖子: sql server 插入的数据有单引号:将单引号替换成 两个单引号 下篇帖子: SQL 优化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表