SQLServer 实用语法大全

SQLServer 实用语法大全,第1张

概述SQLServer 实用语法大全 一、SQLserver篇 1、将表名作为参数的存储过程 eg: create proc s_Table_SearchInfo  @TableName nvarchar(100)  AS   Begin declare @value nvarchar(50),                 @sql nvarchar(1000)  set @sql= ' sele sqlServer 实用语法大全

一、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] 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,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,getdate()),0)


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


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

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

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

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

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

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

  9.本年的最后一天
  SELECT dateadd(ms,0))

  10.本月的第一个星期一
  select DATEADD(wk,dateadd(dd,6-datepart(day,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 



二、MysqL篇


纯CMD的方式 *** 作MysqL
启动MysqL服务
命令行 > net start MysqL
如果是Win7系统需要使用管理员身份运行


关闭服务
net stop MysqL


进入MySQL命令行界面
登录 MysqL -u 用户名 -p 回车,然后输入密码
MysqL -u root -p
welcome


修改密码
update MysqL.user set password = '新密码'
where user = '用户名'
update MysqL.user set password = 'heshang'
where user = 'root'
修改完毕后需要重启服务才能生效


查看表结构
describe 表名


查看表:
show tables;


在MysqL中默认情况下不显示bit类型,需要通过输出格式化来进行显示。
两种主要方式:
进制转换:二进制、八进制、十六进制。
编码转换:ASCII
十六进制:hex(字段名)
ASCII:ord(字段名)


查看字段值的长度
length(字段名)


MysqL中没有IDentity标识列,只有自动生成auto_increment。
MysqL中如果表中有自动生成列,则Insert时不能够省略字段名。
自动生成列必须和主键一起使用。


自动生成列和标识列的区别
标识列是只读的,不允许添加。
自动生成列在值为空的时候会自动生成值,在值不为空的时候不会自动生成。


导出数据库
MysqLdump -u root -p 数据库名>文件名.sql;
该命令必须在MysqL安装目录中的bin目录下执行。


导入数据库
source 路径/文件名.sql
导入数据库时,必须在MysqL中建立相应数据库


返回数据库最上级
use MysqL;
show
修改表结构中的字段
alter table 表名
change column 字段名 新字段名 新类型 新约束...;


重命名一张表
alter table 表名 rename 新表名;


删除字段
alter table 表名
drop 字段名;


删除主键
alter table 表名

drop primary key;


备注:很多是网上搜集而来,正确性还有待验证。

           疏漏之处还请多多指正,谢谢!

总结

以上是内存溢出为你收集整理的SQLServer 实用语法大全全部内容,希望文章能够帮你解决SQLServer 实用语法大全所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1171941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存