首页 > 数据库技术 > 详细

常用SQL

时间:2019-04-25 18:40:34      阅读:193      评论:0      收藏:0      [点我收藏+]

日志查询

技术分享图片
SELECT
    TOP 100 a.CreateTime AS 运行时间,
    --b.p_id,
    --a.Login_UserId AS ‘操作人id‘,
    a.Login_UserName AS 操作人姓名,
    b.p_remark AS sql方法,
    a.SqlName AS SQL名,
    a.SqlContent AS 运行SQL内容,
    a.ErrorPrompt AS 错误提示
    --b.p_sql AS ‘SQL‘,
    --a.Source AS ‘来源‘,
    --a.CreatePeople AS ‘主机名‘
FROM
    System_Log AS a
LEFT JOIN PrintSql AS b ON b.p_name = a.SqlName
WHERE
    1 = 1
AND b.p_remark NOT IN (未同步数据,查询session_zj)
AND DateDiff(dd, a.CreateTime, getdate()) = 0
--AND b.p_name LIKE ‘%insert_Order_OrderInfo_OneAndMany%‘
ORDER BY
    a.CreateTime DESC;

SELECT COUNT(*) FROM System_Log WHERE DateDiff(dd, CreateTime, getdate()) = 0;
日志查询
技术分享图片
UPDATE [dbo].[PrintSql] SET [p_sql]=N  WHERE ([p_id]=999)
修改sql

 创建表

技术分享图片
--删除表
--DROP TABLE [dbo].[System_Code_InstallationPeriod]


--创建表
CREATE TABLE [dbo].[System_Code_InstallationPeriod] (
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[Name] nvarchar(50) NULL  DEFAULT 默认值, 
[TypeId] INT NULL,
[Money] money NULL,
[CreatePeople] nvarchar(50) NULL ,
[CreateTime] datetime NULL ,
[ModifyPeople] nvarchar(50) NULL ,
[ModifyTime] datetime NULL 
)

--添加表说明
EXECUTE sp_addextendedproperty   NMS_Description,N安装时段表,Nuser,Ndbo,Ntable,NSystem_Code_InstallationPeriod,NULL,NULL
--删除表说明
--EXEC sp_dropextendedproperty N‘MS_Description‘,‘user‘,‘dbo‘,‘table‘, ‘表名‘, NULL,NULL

--添加字段说明
EXECUTE   sp_addextendedproperty   NMS_Description,N【安装时段名称】,Nuser,Ndbo,Ntable,NSystem_Code_InstallationPeriod,Ncolumn,NName


--添加字段说明
EXECUTE   sp_addextendedproperty   NMS_Description,N【创建人】,Nuser,Ndbo,Ntable,NSystem_Code_InstallationPeriod,Ncolumn,NCreatePeople
EXECUTE   sp_addextendedproperty   NMS_Description,N【创建时间】,Nuser,Ndbo,Ntable,NSystem_Code_InstallationPeriod,Ncolumn,NCreateTime
EXECUTE   sp_addextendedproperty   NMS_Description,N【修改人】,Nuser,Ndbo,Ntable,NSystem_Code_InstallationPeriod,Ncolumn,NModifyPeople
EXECUTE   sp_addextendedproperty   NMS_Description,N【修改时间】,Nuser,Ndbo,Ntable,NSystem_Code_InstallationPeriod,Ncolumn,NModifyTime

--删除字段说明
--EXEC sp_dropextendedproperty N‘MS_Description‘, ‘user‘,‘dbo‘, ‘table‘, ‘表名‘, ‘column‘,‘字段名‘

创建表
创建表
技术分享图片
alter table Personnel_Position ADD ProjectId INT NULL;
alter table Personnel_Position ADD ProjectName nvarchar(50) NULL;

--添加字段说明
EXECUTE   sp_addextendedproperty   NMS_Description,N【项目名称】,Nuser,Ndbo,Ntable,NPersonnel_Position,Ncolumn,NProjectId;
EXECUTE   sp_addextendedproperty   NMS_Description,N【项目名称】,Nuser,Ndbo,Ntable,NPersonnel_Position,Ncolumn,NProjectName;

aaa_select_table Personnel_Position;
追加字段

sql 增删改查分页 语句

技术分享图片
--insert_System_Userinfo_Staff
--增加账户(职员)表_zj

BEGIN TRY 
IF((SELECT COUNT(*) FROM [dbo].[System_Userinfo_Staff] WHERE UserName = {UserName})=0)
 begin
insert [System_Userinfo_Staff] values({UserName},{UserPassword},{Staffid},{StaffName},{RoleId},{RoleName},{CityId},{CityName},{IsEnable},{CreatePeople},GETDATE(),‘‘,‘‘)
  SELECT ResponseNum=1,Message=保存成功
 end
ELSE
 begin
  SELECT ResponseNum=0,Message=账户重复
 end
END TRY
BEGIN CATCH 
  SELECT ResponseNum=0,Message=ERROR_MESSAGE()
END CATCH
增加
技术分享图片
--删除账户(职员)表_zj
--delete_System_Userinfo_Staff


delete [System_Userinfo_Staff] where Id = {Id}
删除
技术分享图片
--修改账户(职员)表_zj
--update_System_Userinfo_Staff


BEGIN TRY 
IF((SELECT COUNT(*) FROM[dbo].[System_Userinfo_Staff] WHERE UserName = {UserName} AND Id != {Id})=0)
 begin
  update [System_Userinfo_Staff] set UserName = {UserName},UserPassword = {UserPassword},Staffid = {Staffid},StaffName = {StaffName},RoleId = {RoleId},RoleName = {RoleName},CityId = {CityId},CityName = {CityName},IsEnable = {IsEnable},ModifyPeople = {ModifyPeople},ModifyTime = GETDATE() where Id = {Id}
  SELECT ResponseNum=1,Message=修改成功
 end
ELSE
 begin
  SELECT ResponseNum=0,Message=账户重复
 end
END TRY
BEGIN CATCH 
  SELECT ResponseNum=0,Message=ERROR_MESSAGE()
END CATCH
修改
技术分享图片
--查询账户(职员)表(单条)_zj
--select_System_Userinfo_Staff


--select * from [System_Userinfo_Staff] where Id = {Id}
查询
技术分享图片
--page_System_Userinfo_Staff
--查询账户(职员)表(分页)

if (exists (select * from sys.objects where name = page_System_Userinfo_Staff)) drop proc page_System_Userinfo_Staff   --判断存储过程是否存在,存在则删除然后重建。
go


create proc page_System_Userinfo_Staff  --创建存储过程 
 @pagesize INT,
 @pageindex INT,
 @Name nvarchar (50),
 @RoleId nvarchar (50),
 @IsEnable nvarchar (50)
AS
BEGIN
    --开始
DECLARE @pagebefore INT ;
DECLARE @pagerear INT ;
DECLARE @condition nvarchar (2000) ;
SET @pagebefore =@pagesize *@pageindex ;
SET @pagerear =@pagebefore +@pagesize ;
SET @condition =  where 1=1  ;
IF (@Name <> ‘‘)
SET @condition =@condition +  and UserName like ‘‘% +@Name + %‘‘  OR [StaffName] LIKE ‘‘% +@Name + %‘‘‘ ;
IF (@RoleId <> ‘‘)
SET @condition =@condition +  and RoleId =  +@RoleId + ‘‘;
IF (@IsEnable <> ‘‘)
SET @condition =@condition +  and IsEnable =  +@IsEnable + ‘‘;
EXEC (
    
    declare @table table(
    iid int identity,
  Id INT,
  UserName nvarchar(50),
  UserPassword nvarchar(50),
  StaffId INT,
  StaffName nvarchar(50),
  RoleId INT,
  RoleName nvarchar(50),
  CityId INT,
  CityName nvarchar(50),
  IsEnable  INT,
  CreatePeople nvarchar(50),
  CreateTime datetime,
  ModifyPeople nvarchar(50),
  ModifyTime datetime
    )
    insert @table
    select * from System_Userinfo_Staff  +@condition +  and RoleId <> 1 order by Id desc
    select * from @table where iid> +@pagebefore +  and iid<= +@pagerear + 
    select count(*) as rows from @table;
) ;
END ; --结束
分页

触发器

技术分享图片
--查看当前库中所有的触发器和与之相对应的表:
SELECT
    tb2.name AS 对应的表,
    tb1.name AS 触发器,
    tb1.crdate AS 创建时间
FROM
    Sysobjects tb1
JOIN Sysobjects tb2 ON tb1.parent_obj = tb2.id
WHERE
    tb1.type = TR;

--显示触发器的定义:
EXEC sp_helptext UPDATE_Personnel_Staff_Changes;
查看当前库中所有的触发器和与之相对应的表
技术分享图片
--Inserted表有数据,Deleted表无数据 

CREATE trigger INSERT_PrintSql
ON PrintSql 
FOR INSERT
As
INSERT into PrintSql_Log SELECT inserted.p_name, inserted.p_sql,inserted.p_remark,增加,(SELECT client_net_address FROM sys.dm_exec_connections WHERE Session_id =@@spid),GETDATE() from inserted
插入操作(Insert)
技术分享图片
--Inserted表无数据,Deleted表有数据 


CREATE trigger DELETE_PrintSql
ON PrintSql 
FOR DELETE
As
INSERT into PrintSql_Log SELECT Deleted.p_name, Deleted.p_sql,Deleted.p_remark,删除,(SELECT client_net_address FROM sys.dm_exec_connections WHERE Session_id =@@spid),GETDATE() from Deleted
删除操作(Delete)
技术分享图片
--Inserted表有数据(新数据),Deleted表有数据(旧数据)

CREATE trigger UPDATE_PrintSql
ON PrintSql 
FOR UPDATE
As
INSERT into PrintSql_Log SELECT inserted.p_name, inserted.p_sql,inserted.p_remark,修改,(SELECT client_net_address FROM sys.dm_exec_connections WHERE Session_id =@@spid),GETDATE() from inserted
更新操作(Update)

查询表详情

技术分享图片
SELECT
表名=case   when   a.colorder=1   then   d.name   else   ‘‘   end,
表说明=case   when   a.colorder=1   then   isnull(f.value,‘‘)   else   ‘‘   end,
字段序号=a.colorder,
字段名=a.name,
标识=case   when   COLUMNPROPERTY(   a.id,a.name,IsIdentity)=1   then   else   ‘‘   end,
主键=case   when   exists(SELECT   1   FROM   sysobjects   where   xtype=PK   and   name   in   (
SELECT   name   FROM   sysindexes   WHERE   indid   in(
SELECT   indid   FROM   sysindexkeys   WHERE   id   =   a.id   AND   colid=a.colid
)))   then      else   ‘‘   end,
类型=b.name,
占用字节数=a.length,
长度=COLUMNPROPERTY(a.id,a.name,PRECISION),
小数位数=isnull(COLUMNPROPERTY(a.id,a.name,Scale),0),
允许空=case   when   a.isnullable=1   then   else   ‘‘   end,
默认值=isnull(e.text,‘‘),
字段说明=isnull(g.[value],‘‘)
FROM   syscolumns   a
left   join   systypes   b   on   a.xusertype=b.xusertype
inner   join   sysobjects   d   on   a.id=d.id     and   d.xtype=U   and     d.name<>dtproperties
left   join   syscomments   e   on   a.cdefault=e.id
left   join   sys.extended_properties   g   on   a.id=g.major_id   and   a.colid=g.minor_id
left   join   sys.extended_properties   f   on   d.id=f.major_id   and   f.minor_id=0
--where   d.name=‘Exam_Options‘         --如果只查询指定表,加上此条件
order   by   a.id,a.colorder
查询表详情

循环插入

技术分享图片
--声明变量
declare @i int   
--变量=1
set @i=1
--循环(次数+1)
while @i< (SELECT COUNT(*) FROM [dbo].[Personnel_Staff] WHERE  DepartmentId = 3)+1
begin
--查询符合的职员信息加入临时表
select row_number () OVER (ORDER BY Id) AS NumberId,* INTO #Temp FROM [dbo].[Personnel_Staff] WHERE  DepartmentId = 3 ORDER BY Id ASC 
--声明变量
declare @StaffId int   
declare @StaffName nvarchar(50)
--设置变量
set @StaffId=(select Id from #Temp where NumberId =@i)
set @StaffName=(select Name from #Temp where NumberId =@i)
--删除临时表
drop Table #Temp
--数据增加
INSERT [System_Message]
VALUES
    (
        1,
        1111,
        @StaffId,
        @StaffName,
        PC端,
        1,
        【消息标题】,
        【消息内容】,
        0,
        测试,
        GETDATE(),
        NULL,
        NULL
    )
--循环变量增加1
  set @i=@i +1 
end
循环插入

事务

技术分享图片
BEGIN try
BEGIN TRANSACTION 
  --修改订单状态
  UPDATE [Order_OrderInfo] SET OrderStatusId = 13,    /*【订单状态Id】*/ OrderStatusName = 异常-转异常,    /*【订单状态名称】*/WHERE Id = {Id}
  --插入订单操作记录
  INSERT into Order_Operating_Record SELECT *,13,异常-转异常,{Login_UserId},{Login_UserName},GETDATE(),{Id},{OperationRemarks} from Order_OrderInfo WHERE Id = {Id}
  SELECT ResponseNum = 1,Message = 保存成功 
  COMMIT TRANSACTION  --事务已经成功执行,提交事务。
END try
BEGIN catch 
  SELECT ResponseNum = 0,Message = ERROR_MESSAGE() 
  ROLLBACK TRANSACTION --数据处理过程中出错,回滚到没有处理之前的数据状态
END catch


/******************************************************************************************/
/******************************************************************************************/
/******************************************************************************************/

--开启事务
begin tran
--错误扑捉机制,看好啦,这里也有的。并且可以嵌套。
begin try  
   --语句正确
     UPDATE [erpnew].[dbo].[System_MenuJurisdiction] SET [MenuId]=11 WHERE ([Id]=1)
   --MenuId为int类型,出错
     UPDATE [erpnew].[dbo].[System_MenuJurisdiction] SET [MenuId]=1w WHERE ([Id]=1)
   --语句正确
     UPDATE [erpnew].[dbo].[System_MenuJurisdiction] SET [MenuId]=13 WHERE ([Id]=1)
end try
begin catch
   SELECT ResponseNum=0,Message=ERROR_MESSAGE()
   if(@@trancount>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务
      rollback tran  ---数据处理过程中出错,回滚到没有处理之前的数据状态
end catch
if(@@trancount>0)
commit tran  --事务已经成功执行,数据已经处理妥当。
SELECT ResponseNum=1,Message=保存成功
事务

保存从存储过程返回的结果集

技术分享图片
create table #helpuser
(
UserName nvarchar(128),
RoleName nvarchar(128),
LoginName nvarchar(128),
DefDBName nvarchar(128),
DefSchemaName nvarchar(128),
UserID smallint,
SID smallint
)

insert into #helpuser exec sp_helpuser

select * from #helpuser
--删除临时表
drop Table #helpuser
保存从存储过程返回的结果集

其他

技术分享图片
--创建序号插入临时表
select row_number () OVER (ORDER BY Id) AS NumberId,* INTO #Temp FROM [dbo].[Personnel_Staff]  ORDER BY Id ASC 
--查询第二条数据
select * from #Temp where NumberId =2
--删除临时表
drop Table #Temp
查询第几条
技术分享图片
SELECT ltrim(floor(rand()*10000))
随机数
技术分享图片
SELECT row_number () OVER (ORDER BY Id) AS 序号 ,* FROM [dbo].[System_Code_OrderSource]
序号
技术分享图片
--2018-11-13
SELECT CONVERT(varchar(50) , GETDATE(), 23 ) AS TIME

--2018-11-13 18:46:14
SELECT CONVERT(varchar(50) , GETDATE(), 20 ) AS TIME

--2019-01-14 17:15:59.920
select convert(varchar(50),GETDATE(),121)
时间转字符串
技术分享图片
SELECT
    CONVERT (VARCHAR(4),YEAR(GETDATE())) AS ,
    CONVERT (VARCHAR(4),MONTH(GETDATE())) AS ,
    CONVERT (VARCHAR(4),DAY(GETDATE())) AS 
年月日
技术分享图片
SELECT insert_id =@@IDENTITY
查询插入的id
技术分享图片
select * from System_Code_OrderSource a where a.id=(select max(id) from System_Code_OrderSource)
查询表最新的一条数据
技术分享图片
SELECT 
CASE Sex 
WHEN 0 THEN 
WHEN 1 THEN 
ELSE ‘‘
END AS 性别
FROM
    System_Userinfo_Staff


SELECT
CASE
WHEN w_grade >= 90 THENA
WHEN w_grade >= 80 AND w_grade <= 89 THEN B
WHEN w_grade >= 70 AND w_grade <= 79 THEN C
WHEN w_grade >= 60 AND w_grade <= 69 THEN D
ELSE E
END AS 成绩评定
FROM
    tb_gradego
条件判断
技术分享图片
select * from xi a where (a.username) in  (select username from xi group by username  having count(*) > 1)
查询重复数据
技术分享图片
SELECT
    *,
(select TOP 1 aa.Id from System_Code_OrderSource aa where aa.Id<a.Id ORDER BY aa.Id DESC) AS 上一篇id,
(select TOP 1 aa.Id from System_Code_OrderSource aa where aa.Id>a.Id ORDER BY aa.Id) AS 下一篇id
FROM
    [dbo].[System_Code_OrderSource] AS a
WHERE
    Id = 5
跳转上一页下一页
技术分享图片
BEGIN TRY 
SELECT 5 / 0
END TRY
BEGIN CATCH 
SELECT ERROR_MESSAGE() AS 错误描述,
             ERROR_NUMBER() AS 错误号,
             ERROR_SEVERITY() AS 严重级别,
             ERROR_STATE() AS 错误状态号,
             ERROR_LINE() AS 出错的行号,
             ERROR_PROCEDURE() AS 发生错误的存储过程名或触发器名
END CATCH
TRY CATCH
技术分享图片
SELECT
    host_id() AS 主机端口号,
    host_name() AS 主机名,
  @@SERVERNAME AS 服务器的名称,
    client_net_address 客户端IP,
    local_net_address 服务器的IP
FROM
    sys.dm_exec_connections
WHERE
    Session_id =@@spid
主机端口号 主机名 服务器的名称 客户端IP 服务器的IP
技术分享图片
--20190306094000
select convert(varchar(8),GETDATE(),112)+replace(convert(varchar(8),GETDATE(),114),:,‘‘)

--20190306094332437
select convert(varchar(8),GETDATE(),112)+replace(convert(varchar(12),GETDATE(),14),:,‘‘)

--当月天数
select day(dateadd(ms,-3,DATEADD(m, DATEDIFF(m,0,getdate())+1,0)))

---当月第一天
select dateadd(d,-day(getdate())+1,getdate())

---当月最后一天
select dateadd(d,-day(getdate()),dateadd(m,1,getdate()))

--明年上月的最后一天此时
select dateadd(d,-day(getdate()),dateadd(m,12,getdate()))

--当月第一个星期一
SELECT DATEADD(wk, DATEDIFF(wk, ‘‘, DATEADD(dd, 6 - DAY(getdate()), getdate())), ‘‘)

--今天的所有数据
select * from System_Log where DateDiff(dd,CreateTime,getdate())=0

--昨天的所有数据
select * from System_Log where DateDiff(dd,CreateTime,getdate())=1

--7天内的所有数据
select * from System_Log where DateDiff(dd,CreateTime,getdate())<=7

--30天内的所有数据
select * from System_Log where DateDiff(dd,CreateTime,getdate())<=30

--本月的所有数据:
select * from System_Log where DateDiff(mm,CreateTime,getdate())=0

--本年的所有数据
select * from System_Log where DateDiff(yy,CreateTime,getdate())=0

--查询今天是今年的第几天
select datepart(dayofyear,getDate())

--查询今天是本月的第几天
select datepart(dd, getDate())  
select day(getDate())

--查询本周的星期一日期是多少 (注意:指定日期不能是周日,如果是周日会计算到下周一去。所以如果是周日要减一天)
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)

--查询昨天日期
select convert(char,dateadd(DD,-1,getdate()),121) 

--查询本月第一天日期
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) as firstday

--查询本月最后一天日期
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) as lastday 

--本月有多少天
select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast((cast(year(getdate()) as varchar)+-+cast(month(getdate()) as varchar)+-01 ) as datetime ))))

--求两个时间段相差几天
select datediff(day,2016/5/17,2016/8/20) as daysum

--在指定的日期上±N天
select convert(char,dateadd(dd,1,getdate()),111) as riqi    

--在指定的日期上±N分钟://查询当前时间15分钟之前的日期
select dateadd(mi,-15,getdate())  
时间相关
技术分享图片
SELECT CONVERT (VARCHAR(50), dateadd(dd,1,getdate()), 23)
查询明天
技术分享图片
--查看执行时间和cpu占用时间

set statistics time on
select * from dbo.Product
set statistics time off

--查看查询对I/0的操作情况

set statistics io on
select * from dbo.Product
set statistics io off
优化查询
技术分享图片
set language NSimplified Chinese
select datename(weekday, getdate())
select datename(dw, getdate())
星期几
技术分享图片
SELECT STUFF((SELECT, + CONVERT (VARCHAR, aa.Id)FROM[dbo].[System_Code_City] AS aa FOR XML PATH (‘‘)),1,1,‘‘) AS Id 

declare @ids varchar(1000)
set @ids=1,2,3,4
select * from System_Code_City where charindex(,+ltrim(ProjectId)+,,,+@ids+,)>0
1,2,3

“因为数据库正在使用,所以无法获得对数据库的独占访问权”,终解决方案如下

关键SQL语句:
ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE

用完之后再
ALTER database [ datebase] set online

 

常用SQL

原文:https://www.cnblogs.com/zj19940610/p/10769978.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!