运用动态SQL创设数据库

2019-11-14 17:32栏目:网站首页

/*其实本人也搞不懂为啥要用SQL来创立,明明SQL Server有图形化创制数据库多方便啊!*/
USE master;

CREATE PROC sp_job_LoadPorc
@command     nvarchar(4000),         --异步调用的仓库储存进程或然要施行的 Transact-SQL 语句
@DatabaseName sysname=NULL,        --在特别数据库中实施作业步骤,默许在当下数据库中
@jobdelay      int=5,                --当前时光华的略阿分钟试行,该值大于等于5
@jobid        uniqueidentifier OUTPUT --定义的学业编号
AS
--作业名称,作业的施行时间
DECLARE @jobname sysname,@time int
SELECT @jobname=N'有时作业'
         N'_' LEFT(HOST_NAME(),40)
         N'_' CONVERT(char(19),GETDATE(),120)
         N'_' CAST(NEWID() as varchar(36)),
    @jobdelay=CASE
        WHEN ISNULL(@jobdelay,0)<5 THEN 5
        ELSE @jobdelay 1 END,
    @time=REPLACE(CONVERT(char(8),
        DATEADD(Second,@jobdelay,GETDATE()),
        108),':','')

​DECLARE @sqlstr nvarchar(max)
/*概念三个变量*/
DECLARE @database_name nvarchar(20) = 'MyDB';
/*这里输入需求创制的数据库名*/
DECLARE @file_name_d nvarchar(200) = CONVERT(sysname, SERVERPROPERTY('InstanceDefaultDataPath'))
/*此间是利用SQL Server的serverproperty这么些函数来取妥当前实例的暗中认可数据文件地点和日志文件地点*/
DECLARE @file_name_l nvarchar(200) = CONVERT(sysname, SERVERPROPERTY('InstanceDefaultLogPath'))
/*微软官方参数介绍

IF DB_ID('MyDB') IS NOT NULL
    BEGIN
        PRINT 'Database ' @database_name ' already exists';  --判别MyDB是还是不是留存,存在的话就杀掉,笔者也不知情为何要这么写
        DROP DATABASE MyDB; --仍然手动删除吧,不利用脚本删除
    END

--数据库名
IF DB_ID(@DatabaseName) IS NULL
    SET @DatabaseName=DB_NAME()

ELSE
    
    BEGIN
        SET @sqlstr= 'CREATE DATABASE' ' ' @database_name ' '
        SET @sqlstr =  @sqlstr 'ON'
        SET @sqlstr =  @sqlstr '('    
        SET @sqlstr =  @sqlstr 'NAME = ' ' ' @database_name '_dat,'
        SET @sqlstr =  @sqlstr 'FILENAME = ' '''' @file_name_d '' @database_name '.mdf'','
        SET @sqlstr =  @sqlstr 'SIZE = 10,'
        SET @sqlstr =  @sqlstr 'MAXSIZE = 50,'
        SET @sqlstr =  @sqlstr 'FILEGROWTH = 5'
        SET @sqlstr =  @sqlstr ')'
        SET @sqlstr =  @sqlstr 'LOG ON'
        SET @sqlstr =  @sqlstr '(   NAME = ' ' ' @database_name '_log,'
        SET @sqlstr =  @sqlstr 'FILENAME = ' '''' @file_name_l '' @database_name '.ldf'','
        SET @sqlstr =  @sqlstr 'SIZE = 5MB,'
        SET @sqlstr =  @sqlstr 'MAXSIZE = 25MB,'
        SET @sqlstr =  @sqlstr 'FILEGROWTH = 5MB'
        SET @sqlstr =  @sqlstr ');'
        Print (@sqlstr) -- 假诺不想平素试行,使用应用print参数先把命令打印出来
        --exec (@sqlstr);   -- 奉行直接下面生成的动态SQL
        --Print 'Datbaase ' @database_name ' has been created using default data and log location in the server configuration!!'
        /*打字与印刷已经创办成功的数据库名字*/
        --Print 'Data file location = ' @file_name_d @database_name '.mdf';
        /*打字与印刷创造的数据库的数据文件路线*/
        --Print 'Log file location = ' @file_name_l @database_name '.ldf';
        /*打字与印刷成立的数据库的日记文件路线*/
    END

--检查是否存在同名作业,存在则删除
IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name=@jobname)
    EXEC msdb..sp_delete_job @job_name=@jobname

--定义作业
EXEC msdb.dbo.sp_add_job
    @job_name = @jobname,
    @delete_level =3,           --作业实行后自动删除
    @job_id = @jobid OUTPUT

--定义作业步骤
EXEC msdb.dbo.sp_add_jobstep
    @job_id = @jobid,
    @step_name = N'异步调用存款和储蓄进度照旧实行Transact-SQL 语句',
    @subsystem = 'TSQL',
    @database_name=@DatabaseName,
    @command = @command

--创制调治
EXEC msdb..sp_add_jobschedule
    @job_id = @jobid,
    @name = N'异步调用存款和储蓄进程或许施行Transact-SQL 语句',
    @freq_type=1,
    @active_start_time = @time

--增多指标服务器
DECLARE @servername sysname
SET @servername=CONVERT(nvarchar(128),SERVERPROPERTY(N'ServerName'))
EXEC msdb.dbo.sp_add_jobserver
    @job_id = @jobid,
    @server_name = @servername

版权声明:本文由威尼斯人app发布于网站首页,转载请注明出处:运用动态SQL创设数据库