SQLServer 实用语法大全

1、将表名作为参数的存储过程
eg:
create proc s_Table_SearchInfo 
@TableName nvarchar(100) 
AS
  Begin
declare @value nvarchar(50),
                @sql nvarchar(1000) 
set @sql= ' select * from ' + @TableName 
exec sp_executesql @sql, N'@value   int   output ', @value output   
select @value
End
GO


调用:存储过程名'表名'
eg:s_Table_SearchInfo'StuInfo'



2、模糊查询(分页)的存储过程
eg:
alter proc SA_FuzzySearch
@Name Nvarchar(20),
@MaximumRows int,  
@StartRowIndex int,
@Type Nvarchar(20)
AS 
    Begin
    declare @temp varchar(500)
    set @temp = 'Select Top ' + cast(@MaximumRows as varchar(2))
    set @temp = @temp + ' * From SA Where SA_ID Not In (Select Top ' +cast(@StartRowIndex as varchar(2))+ ' SA_ID From SA Where SA_Name Like '
    set @temp = @temp + '(''%'+ @Name +'%'') or SA_IsAdministrator like (''%'+ @Type +'%'') Order By SA_ID Desc) and SA_Name Like (''%'+ @Name +'%'') or SA_IsAdministrator like (''%'+ @Type +'%'') Order By SA_ID Desc'
    exec (@temp)
    End
Go



3、判断一个数据库是否offline
 If EXISTS(select * From master.dbo.sysdatabases where name='dd' and status<>512)
    print '是'
 else
    print '否'

4、SQL Server中判断数据库对象是否存在:
  if EXISTS(select * from sys.databases where Name = 'ZHyry')
      BEGIN 
        print '存在'
      END
   ELSE
      BEGIN
        print '不存在'
      END


5、SQL Server中判断表中字段是否存在:
 
  if exists(select * from syscolumns where name='colname1' and id=object_id('数据库名.Owner.表名'))
 
  print '存在'
 
  else
 
  print '不存在'




6、Access中判断表对象是否存在:

  Select Count(*) AS Qty FROM MSysObjects Where ((MSysObjects.Name) Like '表名');

    

   SQLServer中判断表是否存在:

        if EXISTS(select TOP 1 * from sys.objects o where o.type=N'U' AND o.name =N'ZHNews')
         print '存在'
      else
         print '不存在' 
      --或者    
      if EXISTS(SELECT TOP 1 * FROM sys.tables t WHERE t.type =N'U' AND t.name =N'Trade')
          print '存在'
      else
         print '不存在'  

 


7、事务
--建立添加新信息的存储过程(s_DataDict)
alter proc s_DataDict_InsertInfo
@Name nvarchar(30),
@CName nvarchar(30),
@Time datetime
AS
  Begin
    --开始事务
Begin transaction
    --判断表是否存在
if exists(select * from sysobjects where Name = @Name)
        Begin
        --捕获错误信息
        raiserror('该表已创建!',1,1)
        --回滚事务
   rollback transaction
        End
    else
        Begin      
        insert into s_DataDict values(newID(),@Name,@CName,@Time)
   --建立相应的子表
        exec(' create table ' + @Name + '(
   Pid uniqueidentifier not null ,
        DataDictpid uniqueidentifier not null,
   Name nvarchar(30) not null,
   OrderMark int not null
   )') 
        --以及相应的主外键
        exec(' alter table ' + @Name +
        ' add constraint constraint_' + @Name + 
        ' Foreign key (DataDictpid)
        references s_DataDict(Pid)
        ')
        --提交事务
        commit transaction 
        End  
  End
GO


(
附加:查询赋值        
      declare @TName nvarchar(50)
      select @TName = TableName from s_DataDict where Pid = @ID    
)



8、重命名数据库、表、列
a:alter database 数据库名
  modify name = 新数据库名
b:exec sp_rename '旧表名','新表名'
c:exec sp_rename '旧表名.旧列名','新表名.新列名'



9、删除字段值相同的ID大的数据
/*
* distinct: 函数指如有多项相同只显示一项
* select * from 表 where 字段 in(select 字段 from 表 group by 字段 having count(1)>1):查询出项多次的数据
*/
Declare @num int ,@i int
select @num = Count(s_Name) from s_Info group by s_Name having count(1)>1
set @i = 0
while @i <= @num
Begin
delete from s_Info where s_ID in(select Max(s_ID) from s_Info where s_Name in (select s_Name from s_Info group by s_Name having count(1) > 1))
set @i = @i + 1
End
Go


10、查询重复的数据
select id,[name],次数 = count(*) from D 
       group by id,[name] having count(*) >= 2
/*
 * 查询不重复的信息
   select id,[name],次数 = count(*) from D 
       group by id,[name] having count(*) = 1
 */ 


11、查询数据库的所有表信息(包括系统表)
    select * from sysobjects 

/*
 * 查询数据库的所有表信息(不包括系统表)
 * select * from sysobjects 
 *     where xtype = 'u' 
 */



12、--复制表(已经存在,新表的结构必须和旧表结构相同)
    insert into OlerdTable select * from NewTable

    --复制表(不存在)
    select * into NewTable from OldTable


13、--本月第一天:
   select dateadd(dd,-day(getdate())+1,getdate())
   
   --本月最后一天:
   select dateadd(dd,-day(getdate()),dateadd(m,1,getdate()))

   --获取当前的星期数
   select 星期 = datepart(WeekDay,getdate()-1)
   select 星期 = DateName(dw,getDate()) 


   --时间函数大全
   年 = DateName(year,GetDate())
   月 = DateName(month,GetDate())
   日 = DateName(day,GetDate())
   星期 = DateName(dw,GetDate())
   周 = DateName(week,GetDate())
   时 = DateName(hour,GetDate()
   分 = DateName(minute,GetDate())
   秒 = DateName(second,GetDate()) 
   毫秒 = DateName(millisecond,GetDate())


    1.一个月第一天的
  SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)


  2.本周的星期一
  SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
   
    扩展:
        SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 1)--周二
        ……
        SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 6)--周末


  3.一年的第一天
  SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

  4.季度的第一天
  SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

  5.当天的半夜
  SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

  6.上个月的最后一天
  SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

  7.去年的最后一天
  SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

  8.本月的最后一天
  SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

  9.本年的最后一天
  SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

  10.本月的第一个星期一
  select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)



14、游标
/*
 * 声明游标:
 * DECLARE 游标名 CURSOR FOR T_SQL;
 *
 *打开游标:
 *OPEN 游标名
 *
 *关闭游标:
 *CLOSE 游标名
 *
 *删除游标:
 *DEALLOCATE 游标名
 *
 *游标读取数据:
 *FETCH NEXT FROM 游标名
 *(或者)Fetch FIRST from 游标名
 */


--声明游标
DECLARE deleteTable CURSOR FOR 
SELECT ltrim(rtrim(NAME)) FROM Sysobjects WHERE NAME LIKE '%000079'


--打开游标
OPEN deleteTable


--关闭游标
CLOSE deleteTable


--删除游标
DEALLOCATE deleteTable


--读取数据
FETCH NEXT FROM deleteTable INTO @Value1,@Value2
--或则 Fetch first from mycursor


--判断游标是否存在 deleteTable:游标名
if cursor_status('global','deleteTable')=-3 and cursor_status('local','deleteTable')=-3
   print '不存在'
else
   print '存在'


CREATE PROC PROC_EA
AS
  BEGIN
       DECLARE EAMCMT4 CURSOR FOR
       SELECT TOP 545 UserId,CreateTime FROM EA_MCMT4 ORDER BY CreateTime DESC
       
       DECLARE @UserId nchar(50), @DateTime smallDatetime, @Id int
       SET @Id = 560


       OPEN EAMCMT4
       WHILE @@FETCH_STATUS = 0
       BEGIn
  FETCH NEXT FROM EAMCMT4 INTO @UserId,@DateTime
  UPDATE EA SET userId=@UserId,[DateTime]= @DateTime WHERE Id=@Id 
  SET @Id = @Id + 1
       END
       CLOSE EAMCMT4
       DEALLOCATE EAMCMT4
  END
GO  


--清空日志
DUMP TRANSACTION DBName WITH NO_LOG

--收缩数据库文件
DBCC SHRINKFILE('dazhou_Log',1)


/*
 *由此推导出SQLserver分页语句
 *pageSize:  每页显示数据条数
 *TableName:查询表名
 *pageIndex:分页索引(默认为1,即首页)
 *pageCount: 总页数
 */
IF pageIndex > 0 AND pageIndex <= pageCount
   BEGIN
SELECT TOP pageSize * FROM TableName tn WHERE tn.ID NOT IN(
  SELECT TOP (pageIndex-1)*pageSize tn.ID FROM TableName tn ORDER BY tn.ID ASC)
  ORDER BY tn.ID ASC
   END
ELSE
   BEGIN
       SELECT TOP pageSize * FROM TableName
   END 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL Server语法大全是一本包含SQL Server数据库查询和操作的语法手册,它提供了SQL Server中各种语句和函数的详细说明和示例。该手册可以帮助开发人员了解和使用SQL Server数据库的各种功能。 在SQL Server语法大全中,我们可以学习到如何创建数据库、表和视图,以及如何插入、更新和删除数据。它还提供了查询数据的各种语句,如SELECT语句和JOIN语句,以及聚合函数和排序函数的使用方法。 此外,SQL Server语法大全还介绍了事务的概念和使用方法,以及如何进行备份和恢复数据库。它还包含了索引、约束和触发器等高级特性的使用方法,可以帮助我们优化数据库的性能和安全性。 无论是初学者还是有一定经验的开发人员,SQL Server语法大全都是一个很好的参考资源。通过学习和熟悉其中的语法,我们可以更加高效地使用SQL Server数据库进行开发和管理。 总而言之,SQL Server语法大全是一本重要的参考手册,它详细介绍了SQL Server数据库的各种语法和功能。无论是学习SQL Server还是提高数据库开发技能,都可以从中受益。 ### 回答2: SQL Server是一种关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)进行数据库管理和操作。SQL Server语法大全PDF是指包含了SQL Server中所有合法语法和命令的文档,方便用户在使用SQL Server时快速查询和使用。 SQL Server语法大全PDF通常会包括以下内容: 1. SQL语言基础:包括SQL查询语句的基本语法、操作符、函数等。 2. 数据库和表的管理:包括数据库的创建、删除、备份、还原等操作,以及表的创建、修改、删除、索引等操作。 3. 数据查询:包括选择数据、过滤数据、排序数据、分组数据等操作。 4. 数据操作:包括数据的插入、更新、删除等操作。 5. 连接和合并表:包括连接多个表进行数据查询、合并等操作。 6. 数据约束:包括主键、外键、唯一约束、检查约束等。 7. 视图的使用:包括创建、修改、删除视图,以及使用视图查询数据。 8. 存储过程和触发器:包括创建、修改、删除存储过程和触发器,以及使用它们处理数据。 9. 数据类型:包括SQL Server支持的数据类型和数据类型转换。 10. 错误处理:包括处理SQL语句执行中可能出现的错误。 SQL Server语法大全PDF可以作为SQL Server的参考手册,帮助用户快速查找和学习SQL Server中的各种语法和命令。对于SQL Server开发人员和数据库管理员来说,熟练掌握SQL Server语法是非常重要的,而SQL Server语法大全PDF就是一个很好的学习和查询工具。 ### 回答3: 《SQL Server语法大全.pdf》是一本详细介绍SQL Server数据库管理系统中各种语法的电子书籍。这本书对SQL Server中的各个方面进行了全面的讲解,使读者能够深入了解和掌握SQL Server语法规则和应用技巧。 《SQL Server语法大全.pdf》的内容包括: 1. SQL Server的基本语法介绍:包括SQL语句结构、SQL Server的数据类型、创建和管理表等基础内容。 2. 数据查询和过滤:介绍了SQL Server中用于查询和过滤数据的SELECT语句以及常用的聚合函数和条件表达式的使用方法。 3. 数据操作和管理:包括插入、更新和删除数据的SQL语句的使用方法,以及如何创建和管理数据库、表和索引等。 4. 数据库事务和并发控制:讲解了SQL Server的事务处理机制和并发控制策略,以及如何使用事务和锁定来确保数据的完整性和一致性。 5. 存储过程和触发器:介绍了SQL Server存储过程和触发器的定义和使用方法,以及如何利用它们来编写复杂的数据操作和业务逻辑。 6. 查询优化和性能调优:讲解了SQL Server中的查询优化技术和性能调优策略,以及如何通过索引、统计信息和查询计划来优化查询性能。 总之,《SQL Server语法大全.pdf》是一本非常实用的参考书,适用于所有希望学习和掌握SQL Server语法的数据库开发人员和管理员。无论是初学者还是有一定经验的人士,都能从中获得有关SQL Server的相关知识和技能。该书的详细内容和清晰的示例可以帮助读者更好地理解和应用SQL Server语法规则,提高数据库管理和开发的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值