日度归档:2019年7月8日

mssql sqlserver 替换关键字Drop table if exists tablename的方法分享


摘要:
由于sqlserver 2008不支持语句drop table if exists的用法,所以我们需对此关键字进行替换,如下所示:
实验环境:sql server 2008 R2


drop table if exists tableName的功能:
当存在表时,则删除表
替换方法:

 ----将 drop table if exists 替换为以下脚本
 IF EXISTS(SELECT name FROM  sysobjects  
        WHERE name = N'数据表名称' AND xtype='U')
begin 
DROP TABLE  [数据表名称]
end 
go

mssql sqlserver数据库执行脚本DROP TABLE IF EXISTS语句出错的处理方法分享


摘要:
下文讲述运行drop table if exists 语句出错的处理方法
实验环境:sql server 2008 R2


今天收到同事的sql更新脚本:

      DROP TABLE IF EXISTS dbo.maomao;
      
      CREATE TABLE dbo.maomao(
	  keyId int identity(1,1),
          info   varchar(30)
      );
      go
    ---在sqlserver 2008下运行一直报错,经过多方面的查证,发现drop table if exists语句不被sqlserver 2008 支持,需修改为以下sql脚本
   
    IF OBJECT_ID(N'dbo.maomao', N'U') IS  NOT  NULL  
        DROP TABLE dbo.maomao   
     go 

       CREATE TABLE dbo.maomao(
	  keyId int identity(1,1),
          info   varchar(30)
      );
      go  

mssql SQL SERVER使用触发器记录sql账号的登录日志


摘要:
下文讲述使用触发器记录sql账号登录日志的方法分享,如下所示:
实验环境:sql server 2008 R2


例:

---1.建立登陆日志存储表
  CREATE   TABLE tbLoginLog 
   (  
    keyId INT NOT NULL IDENTITY(1, 1) ,  
    write date DATETIME NOT NULL  DEFAULT  get date(),                    ---操作时间  
    USERID VARCHAR(128) NOT NULL DEFAULT   SUSER_SNAME() ,     ---登陆账户     
    HOSTNAME VARCHAR(128) NOT NULL DEFAULT  HOST_NAME() ,     ---客户端的机器名                 
    APPNAME VARCHAR(128)NOT NULL DEFAULT  APP_NAME())            ---应用程序名称                          
   )    

  ---2.建立服务器触发器监控登陆日志,并写入至日志表中
go
 CREATE TRIGGER tr_loginLog
ON ALL SERVER  
FOR LOGON  
AS  
BEGIN  
 
    DECLARE @USERID VARCHAR(128) ,                          
        @HOSTNAME VARCHAR(128) ,                                                
        @APPNAME VARCHAR(128)                         
   
    SELECT  @USERID = LOGINAME ,                        --sql操作时使用的sql账户          
            @HOSTNAME = HOSTNAME ,                       --客户端机器名                            
            @APPNAME = PROGRAM_NAME                    --客户端程序名
    FROM    MASTER..SYSPROCESSES  
    WHERE   SPID = @@SPID  
   
    INSERT  tbLoginLog  
            ( 
              USERID ,  
              HOSTNAME ,   
              APPNAME  
            )  
            VALUES(   
                    @USERID ,  
                    @HOSTNAME ,  
                    @APPNAME)  
 
   
END; 
go


---3.查询日志信息
 select  * from tbLoginLog
go