3

我有一个SQL Server数据库,每当我想备份数据库时,首先生成一个Drop and Create Script数据库。因为通过这种方式,我可以在每个版本的SQL Server中创建我的数据库。不管SQL的版本和维护问题。

SQL Server的Generate and Publish Scripts窗口中有一个Advanced Scripting Option,如下图:

高级脚本选项

现在,我想要这个窗口中的一个脚本来重现脚本生成器高级选项。换句话说,我想要一个脚本来通过我选择的Advanced Options生成我的数据库的脚本生成器。

我该怎么做?

4

2 回答 2

2

您可以使用 SQL Server Profiler 检索指定实例中正在执行的 sql。

[如何查看指定实例中执行的批处理 sql][1]

于 2016-02-20T13:17:31.633 回答
0

请参考这篇如何通过查询生成 SQL 表脚本

这是你想要的吗?

declare @table varchar(100)
set @table = 'MyTable' -- set table name here
declare @sql table(s varchar(1000), id int identity)

-- create statement
insert into  @sql(s) values ('create table [' + @table + '] (')

-- column list
insert into @sql(s)
select 
    '  ['+column_name+'] ' + 
    data_type + coalesce('('+cast(character_maximum_length as varchar)+')','') + ' ' +
    case when exists ( 
        select id from syscolumns
        where object_name(id)=@table
        and name=column_name
        and columnproperty(id,name,'IsIdentity') = 1 
    ) then
        'IDENTITY(' + 
        cast(ident_seed(@table) as varchar) + ',' + 
        cast(ident_incr(@table) as varchar) + ')'
    else ''
    end + ' ' +
    ( case when IS_NULLABLE = 'No' then 'NOT ' else '' end ) + 'NULL ' + 
    coalesce('DEFAULT '+COLUMN_DEFAULT,'') + ','

 from information_schema.columns where table_name = @table
 order by ordinal_position

-- primary key
declare @pkname varchar(100)
select @pkname = constraint_name from information_schema.table_constraints
where table_name = @table and constraint_type='PRIMARY KEY'

if ( @pkname is not null ) begin
    insert into @sql(s) values('  PRIMARY KEY (')
    insert into @sql(s)
        select '   ['+COLUMN_NAME+'],' from information_schema.key_column_usage
        where constraint_name = @pkname
        order by ordinal_position
    -- remove trailing comma
    update @sql set s=left(s,len(s)-1) where id=@@identity
    insert into @sql(s) values ('  )')
end
else begin
    -- remove trailing comma
    update @sql set s=left(s,len(s)-1) where id=@@identity
end

-- closing bracket
insert into @sql(s) values( ')' )

-- result!
select s from @sql order by id
于 2016-02-07T16:41:39.737 回答