• SqlServer 常用TSQL语法


    SqlServer 常用T-SQL语法

    --查看对象的T-SQL
    exec sp_helptext procName

    --查看性能
    SET STATISTICS profile ON
    SET STATISTICS io ON
    SET STATISTICS time ON

    --执行计划
    go
    set showplan_all on
    go
    exec Proc_BMIS_Target_RedAndGreenLamp '11020101',2010,5
    go
    set showplan_all off

    --创建触发器
    ALTER TRIGGER [dbo].[TRIGGER_TARGET_MONTH]
      on [dbo].[Target_Month]
     for INSERT,UPDATE,DELETE
    AS
    BEGIN
     --
    END

    --创建索引
    CREATE INDEX索引名 ON 表(字段)     -----------------------------------------不唯一,非聚焦索引
    CREATE UNIQUE CLUSTERED INDEX 索引名 ON表(字段)-----------------唯一聚焦索引

    --创建游标
    -- =============================================
    -- Author:      Zehui Shu
    -- Create date: 2010-12-23
    -- Description: 通过游标实现同步表数据
    -- =============================================
    CREATE PROCEDURE [dbo].[Proc_Syn_Data]
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
        DECLARE @ID INT;
        TRUNCATE TABLE Table2;

        -- 1.声明游标
        DECLARE CUR_MonthID CURSOR FOR
        SELECT ID FROM [Table1]
       
        -- 2.打开游标
        OPEN CUR_MonthID
        -- 3.从一个游标中查找信息,实现自己的数据处理。
        FETCH CUR_MonthID INTO @ID
        WHILE @@FETCH_STATUS=0
        BEGIN
            INSERT INTO [Table2]
            SELECT * FROM [Table1] tm WHERE tm.ID=@ID
            FETCH NEXT FROM CUR_MonthID INTO @ID
        END;

        -- 4.关闭游标
        CLOSE CUR_MonthID;
       
        -- 5.释放游标
        DEALLOCATE CUR_MonthID;
    END

    /***********建约束{共五类,注意字段名的括号[只有默认约束不要括号]}***********/
    --CHECK约束ck
    ALTER TABLE <表名> ADD CONSTRAINT <约束名> CHECK ([字段名]>0 AND [字段名]<100)
    --PRIMARY KEY约束pk
    ALTER TABLE <表名> ADD CONSTRAINT [约束名] PRIMARY KEY([字段名])
    --FOREIGN KEY约束fk
    ALTER TABLE <外键表名> ADD CONSTRAINT [约束名] FOREIGN KEY ([外键字段名]) REFERENCES <主键表名> ([主键字段名])
    --UNIQUE约束uni
    ALTER TABLE <表名> ADD CONSTRAINT [约束名] UNIQUE ([字段名])
    --DEFAULT约束dft
    ALTER TABLE <表名> ADD CONSTRAINT [约束名] DEFAULT '默认值' FOR [字段名]
    --检查约束,删除约束
    IF EXISTS(SELECT * FROM sysobjects s WHERE s.[name]='PK_Target_KPIInfo')
     ALTER TABLE Target_Month DROP CONSTRAINT [约束名]
     


    /*************批量插入数据************/
    --方法1
    INSERT INTO DATA_UFO_TBL_20101214_bak(字段列表) SELECT 字段列表 FROM DATA_UFO_TBL_20101214_bak  WHERE bbny='201007' AND dwbh='11020101'
    --方法2NewTable是将要创建出的新表,这种方法可用于备份数据表
    SELECT * INTO NewTable FROM DATA_UFO_TBL_20101214_bak

    /***************行转列****************/
    SELECT * FROM dbo.Target_Month a
    PIVOT
    (
     SUM(DATA)
     FOR KPICodeID IN ([1],[2],[3],[4],[5]) 
    ) b

    /*************定时释放锁************

     * 系统中,常常出现用户被其他用户锁住,系统不能正常运行的情况。
     * 在这种情况下,需要手工将有锁的进程取消掉。
     * 此功能将手工更改为自动运行。
     *
     * 在数据库系统中,作为任务,每1分钟运行一次。
     *
     * 取消进程的条件:
     * 1、锁住了其他进程。
     * 2、自身没有被其他进程锁住。
     * 3、此进程已经空闲了2分钟以上。
     *
     */
    DECLARE
    @USER_ID INT,
    @KILLCMD VARCHAR(100),
    @WAIT_TIME INT
    -- 设置空闲时间
    SET @WAIT_TIME = 2;
    -- 根据选择条件,选择出应该取消的进程
    DECLARE cur_lock CURSOR FOR
    SELECT spid FROM master..sysprocesses
     WHERE DATEDIFF(minute, last_batch, getdate()) > @WAIT_TIME
     AND blocked = 0
     AND spid IN(SELECT blocked FROM master..sysprocesses);
    -- 取消所有选择出的进程。
    OPEN cur_lock;
    FETCH NEXT FROM cur_lock INTO @USER_ID;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @KILLCMD = 'kill ' + CAST(@USER_ID AS VARCHAR);
    EXECUTE (@KILLCMD);
    FETCH NEXT FROM cur_lock INTO @USER_ID;
    END;
    CLOSE cur_lock;
    DEALLOCATE cur_lock;

    /*************查看锁定信息************/
    /****** 对象:  StoredProcedure [dbo].[sp_who_lock]    脚本日期: 12/23/2010 12:52:29 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER procedure [dbo].[sp_who_lock]
    as
    begin
    declare @spid int,@bl int,
        @intTransactionCountOnEntry     int,
            @intRowcount             int,
            @intCountProperties         int,
            @intCounter             int

        create table #tmp_lock_who (
        id int identity(1,1),
        spid smallint,
        bl smallint)
       
        IF @@ERROR<>0 RETURN @@ERROR
       
        insert into #tmp_lock_who(spid,bl) select  0 ,blocked
          from (select * from sysprocesses where  blocked>0 ) a
          where not exists(select * from (select * from sysprocesses where  blocked>0 ) b
          where a.blocked=spid)
          union select spid,blocked from sysprocesses where  blocked>0

        IF @@ERROR<>0 RETURN @@ERROR   
        
    -- 找到临时表的记录数
        select     @intCountProperties = Count(*),@intCounter = 1
        from #tmp_lock_who
       
        IF @@ERROR<>0 RETURN @@ERROR   
       
        if    @intCountProperties=0
            select '现在没有阻塞和死锁信息' as message

    -- 循环开始
    while @intCounter <= @intCountProperties
    begin
    -- 取第一条记录
            select     @spid = spid,@bl = bl
            from #tmp_lock_who where Id = @intCounter
        begin
         if @spid =0
                select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'

     else
                select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
     DBCC INPUTBUFFER (@bl )
        end   

    -- 循环指针下移
        set @intCounter = @intCounter + 1
    end


    drop table #tmp_lock_who

    return 0
    end


    /*************配置数据库日志和收缩数据库************/

    ALTER PROC [dbo].[Proc_DBCC_1231]
    as
    BEGIN
    declare @dbname sysname
    set @dbname='BMIS_DW'
    --1.清空日志
       exec('DUMP TRANSACTION ['+@dbname+'] WITH   NO_LOG')

    --2.截断事务日志:
       exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')

      --3.收缩数据库文件(如果不压缩,数据库的文件不会减小
      exec('DBCC SHRINKDATABASE(['+@dbname+'])')

     --4.设置自动收缩
       exec('EXEC sp_dboption '''+@dbname+''',''autoshrink'',''TRUE''')

    set @dbname='BMISDEV'
    --1.清空日志
       exec('DUMP TRANSACTION ['+@dbname+'] WITH   NO_LOG')

    --2.截断事务日志:
       exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')

      --3.收缩数据库文件(如果不压缩,数据库的文件不会减小
      exec('DBCC SHRINKDATABASE(['+@dbname+'])')

     --4.设置自动收缩
       exec('EXEC sp_dboption '''+@dbname+''',''autoshrink'',''TRUE''')
    END


    /*************备份还原数据库************/

    --还原数据库
    RESTORE DATABASE DB_Name
    FROM DISK = 'E:\APJ.Project\DB_Name\DataBase_Back\客户数据库20110328\TestDB20110326'
    with replace,
    MOVE 'DB_Name' TO 'D:\database\DB_Name.mdf',
    MOVE 'DB_Name_log' TO 'D:\database\DB_Name_log.ldf'

    --完整备份
    BACKUP DATABASE dbName
    TO DISK = 'D:\SQLDATA\Black\TestR2.bat'
    WITH FORMAT

    --差异备份
    BACKUP DATABASE dbName
    TO DISK = 'D:\SQLDATA\Black\TestR2.bat'
    WITH DIFFERENTIAL

  • 相关阅读:
    设置display:flex后 flex布局设置单个子元素靠右
    wordpress独立站菜单导航设置教程
    javascript对象数组内元素排序
    好用的在线客服系统Go语言源码GOFLY ( 开源代码+安装教程)
    解决golang报错:imports github.com/gosqldriver/mysql from implicitly required module;
    多语言在线客服系统源码自动识别中英环境私有化部署完美支持跨境电商网站
    网页在线客服代码侧边悬浮在线客服/QQ/微信/电话代码
    在线客服系统源码开发实战总结:H5 Notifications浏览器桌面通知
    在线客服系统源码开发实战总结:gin框架模板渲染html页面
    wordpress网站主题安装教程
  • 原文地址:https://www.cnblogs.com/shuzehui/p/2777170.html
Copyright © 2020-2023  润新知