范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

老司机归纳经典SQL语句(二)

  三、技巧
  1、1=1,1=2的使用,在SQL语句组合时用的较多
  "where 1=1" 是表示选择全部 "where 1=2"全部不选,
  如:
  if @strWhere !=""
  begin
  set @strSQL = "select count(*) as Total from [" + @tblName + "] where " + @strWhere
  end
  else
  begin
  set @strSQL = "select count(*) as Total from [" + @tblName + "]"
  end
  我们可以直接写成
  错误!未找到目录项。
  set @strSQL = "select count(*) as Total from [" + @tblName + "] where 1=1 安定 "+ @strWhere  2、收缩数据库
  --重建索引
  DBCC REINDEX
  DBCC INDEXDEFRAG
  --收缩数据和日志
  DBCC SHRINKDB
  DBCC SHRINKFILE
  3、压缩数据库
  dbcc shrinkdatabase(dbname)
  4、转移数据库给新用户以已存在用户权限
  exec sp_change_users_login "update_one","newname","oldname"
  go
  5、检查备份集
  RESTORE VERIFYONLY from disk="E:dvbbs.bak"
  6、修复数据库
  ALTER DATABASE [dvbbs] SET SINGLE_USER
  GO
  DBCC CHECKDB("dvbbs",repair_allow_data_loss) WITH TABLOCK
  GO
  ALTER DATABASE [dvbbs] SET MULTI_USER
  GO
  7、日志清除
  SET NOCOUNT ON
  DECLARE @LogicalFileName sysname,
  @MaxMinutes INT,
  @NewSize INT
  USE tablename -- 要操作的数据库名
  SELECT @LogicalFileName = "tablename_log", -- 日志文件名
  @MaxMinutes = 10, -- Limit on time allowed to wrap log.
  @NewSize = 1 -- 你想设定的日志文件的大小(M)
  Setup / initialize
  DECLARE @OriginalSize int
  SELECT @OriginalSize = size
  FROM sysfiles
  WHERE name = @LogicalFileName
  SELECT "Original Size of " + db_name() + " LOG is " +
  CONVERT(VARCHAR(30),@OriginalSize) + " 8K pages or " +
  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + "MB"
  FROM sysfiles
  WHERE name = @LogicalFileName
  CREATE TABLE DummyTrans
  (DummyColumn char (8000) not null)
  DECLARE @Counter INT,
  @StartTime DATETIME,
  @TruncLog VARCHAR(255)
  SELECT @StartTime = GETDATE(),
  @TruncLog = "BACKUP LOG " + db_name() + " WITH TRUNCATE_ONLY"
  DBCC SHRINKFILE (@LogicalFileName, @NewSize)
  EXEC (@TruncLog)
  -- Wrap the log if necessary.
  WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
  AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
  AND (@OriginalSize * 8 /1024) > @NewSize
  BEGIN -- Outer loop.
  SELECT @Counter = 0
  WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
  BEGIN -- update
  INSERT DummyTrans VALUES ("Fill Log") DELETE DummyTrans
  SELECT @Counter = @Counter + 1
  END
  EXEC (@TruncLog)
  END
  SELECT "Final Size of " + db_name() + " LOG is " +
  CONVERT(VARCHAR(30),size) + " 8K pages or " +
  CONVERT(VARCHAR(30),(size*8/1024)) + "MB"
  FROM sysfiles
  WHERE name = @LogicalFileName
  DROP TABLE DummyTrans
  SET NOCOUNT OFF
  8、说明:更改某个表
  exec sp_changeobjectowner "tablename","dbo"
  9、存储更改全部表
  CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
  @OldOwner as NVARCHAR(128),
  @NewOwner as NVARCHAR(128)
  AS
  DECLARE @Name as NVARCHAR(128)
  DECLARE @Owner as NVARCHAR(128)
  DECLARE @OwnerName as NVARCHAR(128)
  DECLARE curObject CURSOR FOR
  select "Name" = name,
  "Owner" = user_name(uid)
  from sysobjects
  where user_name(uid)=@OldOwner
  order by name
  OPEN curObject
  FETCH NEXT FROM curObject INTO @Name, @Owner
  WHILE(@@FETCH_STATUS=0)
  BEGIN
  if @Owner=@OldOwner
  begin
  set @OwnerName = @OldOwner + "." + rtrim(@Name)
  exec sp_changeobjectowner @OwnerName, @NewOwner
  end
  -- select @name,@NewOwner,@OldOwner
  FETCH NEXT FROM curObject INTO @Name, @Owner
  END
  close curObject
  deallocate curObject
  GO
  10、SQL SERVER中直接循环写入数据
  declare @i int
  set @i=1
  while @i<30
  begin
  insert into test (userid) values(@i)
  set @i=@i+1
  end
  案例:
  有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎上,使他們剛好及格:
  Name score
  Zhangshan  80
  Lishi  59
  Wangwu  50
  Songquan  69
  while((select  min (score) from tb_table)< 60 )
  begin
  update tb_table set score  = score* 1.01
  where score <60
  if (select  min (score) from tb_table) >60
  break
  else
  continue
  end
  数据开发-经典
  1.按姓氏笔画排序:
  Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多
  2.数据库加密:
  select encrypt("原始密码")
  select pwdencrypt("原始密码")
  select pwdcompare("原始密码","加密后密码") = 1--相同;否则不相同 encrypt("原始密码")
  select pwdencrypt("原始密码")
  select pwdcompare("原始密码","加密后密码") = 1--相同;否则不相同
  3.取回表中字段:
  declare @list varchar(1000),
  @sql nvarchar(1000)
  select @list=@list+ "," +b.name from sysobjects a,syscolumns b where a.id=b.id and a.name= "表A"
  set @sql= "select " +right(@list,len(@list)-1)+ " from 表A "
  exec (@sql)
  4.查看硬盘分区:
  EXEC master..xp_fixeddrives
  5.比较A,B表是否相等:
  if (select checksum_agg(binary_checksum(*)) from A)
  =
  (select checksum_agg(binary_checksum(*)) from B)
  print "相等"
  else
  print "不相等"
  6.杀掉所有的事件探察器进程:
  DECLARE hcforeach CURSOR GLOBAL FOR SELECT "kill "+RTRIM(spid) FROM master.dbo.sysprocesses
  WHERE program_name IN("SQL profiler",N"SQL 事件探查器")
  EXEC sp_msforeach_worker "?"
  7.记录搜索:
  开头到N条记录
  Select Top N * From 表
  -------------------------------
  N到M条记录(要有主索引ID)
  Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
  ----------------------------------
  N到结尾记录
  Select Top N * From 表 Order by ID Desc
  案例
  例如1:一张表有一万多条记录,表的第一个字段 RecID 是自增长字段, 写一个SQL语句, 找出表的第 31 到第 40 个记录。
  select top 10 recid from A where recid not in(select top 30 recid from A)
  分析:如果这样写会产生某些问题,如果recid在表中存在逻辑索引。
  select top 10 recid from A where……是从索引中查找,而后面的 select top 30 recid from A 则在数据表中查找,这样由于索引中的顺序有可能和数据表中的不一致,这样就导致查询到的不是本来的欲得到的数据。
  解决方案
  1,  用order by  select top 30 recid from A order by ricid  如果该字段不是自增长,就会出现问题
  2,  在那个子查询中也加条件: select top 30 recid from A where recid>-1
  例2:查询表中的最后以条记录,并不知道这个表共有多少数据,以及表结构。
  set  @s  =  "select top 1 * from T where pid not in (select top "  +  str ( @count-1 ) +  " pid from T)"
  print  @s  exec  sp_executesql   @s
  9:获取当前数据库中的所有用户表
  select Name from sysobjects where xtype="u" and status>=0
  10:获取某一个表的所有字段
  select name from  syscolumns  where id= object_id ("表名")
  select name from  syscolumns  where id in (select id from  sysobjects  where type = "u" and name = "表名")
  两种方式的效果相同
  11:查看与某一个表相关的视图、存储过程、函数
  select a.* from  sysobjects  a,  syscomments  b where a.id = b.id and b.text like "%表名%"
  12:查看当前数据库中所有存储过程
  select name as 存储过程名称 from  sysobjects  where xtype="P"
  13:查询用户创建的所有数据库
  select * from master.. sysdatabases  D where sid not in(select sid from master.. syslogins  where name="sa")
  或者
  select dbid, name AS DB_NAME from master..s ysdatabases  where sid <> 0x01
  14:查询某一个表的字段和数据类型
  select column_name,data_type from information_schema.columns
  where table_name = "表名"
  15:不同服务器数据库之间的数据操作
  --创建链接服务器
  exec sp_addlinkedserver "ITSV ", " ", "SQLOLEDB ", "远程服务器名或ip地址 "
  exec sp_addlinkedsrvlogin "ITSV ", "false ",null, "用户名 ", "密码 "
  --查询示例
  select * from ITSV.数据库名.dbo.表名
  --导入示例
  select * into 表 from ITSV.数据库名.dbo.表名
  --以后不再使用时删除链接服务器
  exec sp_dropserver "ITSV ", "droplogins "
  --连接远程/局域网数据 (openrowset/openquery/opendatasource)
  --1、openrowset
  --查询示例
  select * from openrowset( "SQLOLEDB ", "sql服务器名 "; "用户名 "; "密码 ",数据库名.dbo.表名)
  --生成本地表
  select * into 表 from openrowset( "SQLOLEDB ", "sql服务器名 "; "用户名 "; "密码 ",数据库名.dbo.表名)
  --把本地表导入远程表
  insert openrowset( "SQLOLEDB ", "sql服务器名 "; "用户名 "; "密码 ",数据库名.dbo.表名)
  select *from 本地表
  --更新本地表
  update b
  set b.列A=a.列A
  from openrowset( "SQLOLEDB ", "sql服务器名 "; "用户名 "; "密码 ",数据库名.dbo.表名)as a inner join 本地表 b
  on a.column1=b.column1
  --openquery用法需要创建一个连接
  - -首先创建一个连接创建链接服务器
  exec sp_addlinkedserver "ITSV ", " ", "SQLOLEDB ", "远程服务器名或ip地址 "
  --查询
  select *
  FROM openquery(ITSV, "SELECT * FROM 数据库.dbo.表名 ")
  --把本地表导入远程表
  insert openquery(ITSV, "SELECT * FROM 数据库.dbo.表名 ")
  select * from 本地表
  --更新本地表
  update b
  set b.列B=a.列B
  FROM openquery(ITSV, "SELECT * FROM 数据库.dbo.表名 ") as a
  inner join 本地表 b on a.列A=b.列A
  --3、opendatasource/openrowset
  SELECT *
  FROM opendatasource( "SQLOLEDB ", "Data Source=ip/ServerName;User ID=登陆名;Password=密码 " ).test.dbo.roy_ta
  --把本地表导入远程表
  insert opendatasource( "SQLOLEDB ", "Data Source=ip/ServerName;User ID=登陆名;Password=密码 ").数据库.dbo.表名
  select * from 本地表
  SQL Server基本函数
  SQL Server基本函数
  1.字符串函数  长度与分析用
  1,datalength ( Char_expr) 返回字符串包含字符数,但不包含后面的空格
  2,substring (expression,start,length) 取子串,字符串的下标是从" 1 ",start为起始位置,length为字符串长度,实际应用中以 len(expression) 取得其长度
  3,right (char_expr,int_expr) 返回字符串右边第int_expr个字符,还用 left 于之相反
  4,isnull ( check_expression , replacement_value )如果check_expression為空,則返回replacement_value的值,不為空,就返回check_expression字符操作类
  5,Sp_addtype 自定義數據類型
  例如: EXEC sp_addtype birthday, datetime, "NULL"
  6,set nocount {on|off}
  使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
  SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。
  SET NOCOUNT 为 OFF 时,返回计数
  常识
  在SQL查询中: from 后最多可以跟多少张表或视图: 256
  在 SQL 语句中出现  Order by ,查询时, 先排序,后取
  在 SQL 中,一个字段的最大容量是 8000 ,而对于 nvarchar(4000) ,由于 nvarchar 是Unicode码。

新华社武汉地铁5号线有多智能?自动唤醒自动上班近日,湖北首条全自动驾驶地铁5号线正式开通,列车从唤醒检查正线运营回段场休眠全过程均可实现自主完成。28日凌晨3点53分,完全国产化的武汉地铁5号线信号系统发出列车唤醒指令,列车开一直很好奇耳机降噪原理,市面上哪一款降噪耳机比较好用?耳机降噪分为主动降噪和被动降噪,主动降噪就是耳机的降噪设备,发出与噪音相同相反的声波与噪音相抵消从而达到降噪的效果。被动降噪就是通过物理手段降噪,就比如说入耳式的耳机就是一种被动降亚马逊被曝拒绝员工工伤赔偿财经网科技12月31日讯,据新浪科技报道,一些亚马逊员工日前抱怨,他们在工作中受伤后,很难获得赔偿和休假。有员工向媒体爆料称,今年在亚马逊轮班时膝盖受伤,并于10月份接受了手术。但消息称AppleMusic全数9000万首音乐已无损DoNews12月31日消息(刘文轩)苹果在今年6月宣布旗下AppleMusic将提供支持杜比全景声的SpatialAudio功能,另外就是为曲库中的7500万首歌曲提供无损音频选快手和互联网公司明年会怎么样?今天的消息大家应该也看到了,作为大牌的互联网公司,快手,也要降低人员薪资,减少福利,开始过冬了。那么快手和一众互联网公司未来会怎样呢?这个其实很简单,某音,快手,小破站,某书,几乎MQ消费失败,自动重试思路,如何保证MQ消息正常被业务消费MQ消费失败,自动重试思路在遇到与第三方系统做对接时,MQ无疑是非常好的解决方案(解耦异步)。但是如果引入MQ组件,随之要考虑的问题就变多了,如何保证MQ消息能够正常被业务消费。所2022年买手机,内行人建议一步到位,这三款手机堪称十全九美最近不知道是不是已经掀起了一股购机狂潮,每天都有朋友私信我5000预算能入手哪些旗舰?3000预算能入手哪些旗舰?没有预算要求哪些高端机值得买,每次学长都分身乏术,不如直接告诉你们天洑自主研发智能工业设计运维专注AI仿真拥抱DT未来来源人民网人民日报南京天洑软件有限公司是中国智能工业软件研发及技术服务领域的高新技术企业,专注中国自主知识产权的工业软件研发。公司总部位于江苏省南京市,在北京上海宁波大连以及日本横芯片生产在向美国转移,压力即动力,中国微电子产业黄金时期来临世界上最大最强大最高效的处理器。WSE2的尺寸为220x220mm生产一个这样的微电路需要整个300mm硅晶圆。46mm255芯片(大约是最大的GPUNvidiaA56面积的2倍)原银监会主席尚福林增强数字经济时代金融风险防控能力近日,全国政协经济委员会主任原银监会主席尚福林在中国金融安全论坛暨国际金融30人论坛研讨会上,就数字金融时代如何增强金融风险防控能力发表了讲话。尚福林表示,目前,数字金融的业务已涉从游戏机计算机智能手机的过去五十年,看VR和AR的未来五十年文丨真格基金,作者丨徐梧主要观点元宇宙是概念不是机会,新计算设备的进展会带来机会。二维互联网的一连串设备共同构成过去50年的体验和应用。未来50年是前50年的整体迭代。在一个真正意
寻湿地麋鹿探天下会船游溱潼古镇是的,我是被标题里的内容吸引的你是否见过这样的场景见过的,或许也只是在电视里,或许是在各种媒体上,不过这照片却是在泰州姜堰溱湖国家湿地公园里拍的,瞬间就被吸引了。而且这段时间正是溱PGYTECHOneMo摄影背包,实战评测,值得拥有在这个人人都是摄影师的时代,摄影的器材已经不是以前的一个相机一个镜头的时代了,摄影器材越来越多的今天,如何找到一个适合自己的包,也是一个非常重要的事情,非常希望能找到一款看上去外观西湖边最潮的酒店高端日料SPA酒吧超萌女仆一应俱全周末想要一场小资情调的浪漫之旅吗,在杭州这家时髦的酒店,足不出户就能感受到,美豪丽致杭州武林广场店就是杭州的武林广场一带,寸土寸金地段脱胎而出的必刷酒店之一。之所以推荐原因有很多,五一出游就去盐城荷兰花海万株郁金香含苞待放五一马上就要到来,江浙沪的赏花季也因为天气的炎热而慢慢的变成了绿色!而江苏的盐城,这个时候却是万株郁金香齐放,开成了一个五颜六色的世界。今天小胖就带你去盐城的荷兰花海瞧瞧看看。春风有一种生活叫周庄昆山周庄中国第一水乡灯会每每和朋友们谈及古镇,总是在第一时间就能想到开过互联网大会乌镇,看过汉服表演的西塘以及在全世界享有中国第一水乡的美誉的周庄,周庄还是首批中国历史文化名镇首批国家AAAAA级旅游景区全新宝马2系旅行版亮相,设计有继承更有创新,网友啥时候国产在国人的审美之下,总是觉得物品越大越好,在汽车市场也存在这一规律,为了应对这一需求,很多合资汽车品牌针对我国市场推出了很多车型的加长版,甚至为了国内市场推出专属特供车。为了妥协和占本月起,电动车执行三禁交规,其一推车过斑马线随着电动车的新国标出台,很多车主感到无力,若是电动车不属于新国标,在过渡期结束后该何去何从?电动车的管理早就应该出台,这次除了对电动车的生产做出了现在,还对车主制定了一系列的交规制28年人生案真相人们追求的是内心深处的哈姆雷特人生如戏,戏演人生。人们看戏,多半是在戏里能观照自身。从锣鼓响起那一刻,便心神跌宕,载喜载忧,直到曲终幕落,才倏倏然千愁尽散,无比惬意地赞一声精彩!但最曲折最离奇的精彩,永远在真实第一次约会不论男女都适用的话题1名胜古迹以前去过什么名胜古迹?这个问题她很乐于回答,也不会有什么戒心。为了让她打开话匣子,你再请她给你介绍一下,你只要做一个忠实的听者,她会很快对你产生好感。这时你可以再主动一些南卡出品,必出精品南卡POW3磁吸快充无线充电宝测评如今手机成为必备品,而谈到手机必备的配件绝对少不了充电宝产品。目前市售充电宝的品牌型号甚至远超在售的手机型号,消费者购买时自然也容易晕头转向。现在最受欢迎的充电宝基本上存在这样几个想入手一款百元真无线蓝牙耳机?来这Xisem西圣Ava蓝牙耳机测评导语声明不同价格不同品牌的耳机会有不同的市场定位,而作为一款百元耳机,真无线连接以及不差的音效对于普通大众来说实属不易。这款西圣Ava蓝牙耳机官方市售仅119元,还是给人带来了一些