您所在的位置: 首页 > 教程首页 > 新闻资讯 > 实用SQL语句大全

实用SQL语句大全

来源:互联网 | 编辑:啤酒 | 时间:2016-03-17 09:12:15 | 阅读:16777215


  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..sysdatabases where sid <> 0x01

  14:查询某一个表的字段和数据类型

  select column_name,data_type from information_schema.columns

  where table_name = '表名'

数据库查询器(可查询Access、Excel、SQL Server等) V1.4 绿色免费版
数据库查询器(可查询Access、Excel、SQL Server等) V1.4 绿色免费版

类型:数据库相关  大小:0.59MB  平台:

Vista/winXP/win7/win8

相关文章

你可能感兴趣的内容

  • 2021支付宝蚂蚁庄园小课堂8月16日每日一题答案一览
    2021支付宝蚂蚁庄园小课堂8月16日每日一题答案一览
    1、夏天出汗多,每次洗澡得多用几次沐浴露,这种做法?2、所有“脱发人士”都适合做植发手术吗?这里52z飞翔网小编为大家带来2021支付宝蚂蚁庄园小课堂8月16日每日一题答案一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-08-16

  • 2021山东高考分数线全批次一览
    2021山东高考分数线全批次一览
    2021山东高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021山东高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-28

  • 2021福建高考分数线全批次一览
    2021福建高考分数线全批次一览
    2021福建高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021福建高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-28

  • 2021浙江高考分数线全批次一览
    2021浙江高考分数线全批次一览
    2021浙江高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021浙江高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-28

  • 2021宁夏高考分数线全批次一览
    2021宁夏高考分数线全批次一览
    2021宁夏高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021宁夏高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021青海高考分数线全批次一览
    2021青海高考分数线全批次一览
    2021青海高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021青海高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021甘肃高考分数线全批次一览
    2021甘肃高考分数线全批次一览
    2021甘肃高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021甘肃高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021陕西高考分数线全批次一览
    2021陕西高考分数线全批次一览
    2021陕西高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021陕西高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021西藏高考分数线全批次一览
    2021西藏高考分数线全批次一览
    2021西藏高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021西藏高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

  • 2021云南高考分数线全批次一览
    2021云南高考分数线全批次一览
    2021云南高考分数线是多少?本科分数线是多少?还不清楚的小伙伴看过来,这里52z飞翔网小编为大家带来2021云南高考分数线全批次一览的详细介绍!有兴趣的小伙伴不要错过喔!

    新闻资讯

    2021-06-25

热门游戏

下载声明 | 法律声明 | 版权声明 | 友情链接 | 发布软件 | 最新更新

本站为非盈利性网站,不接受任何广告。本站所有资源均由网友上传,如有侵权,请发邮件至 [email protected]

晋ICP备2024046785号-1