以下涉及到这些存储过程都是动态T-SQL语句,通过程序端输入数据库名、表名等参数实现存储过程的执行。
1、创建数据库

1 /*存储过程-创建数据库*/ 2 create proc [dbo].[CreateDB](@dataname nvarchar(50),@maxsize nvarchar(10)) 3 as 4 begin 5 declare @str nvarchar(500) 6 set @str = 'create database ' + @dataname + ' on(name=' + @dataname + ',filename=''C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\' + @dataname 7 + '.mdf'',size=10MB,maxsize=' + @maxsize + ',filegrowth=20%) log on(name=' + @dataname + '_log,filename=''C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\' + @dataname 8 + '_log.ldf'',size=10MB,maxsize=' + @maxsize + ',filegrowth=20%)' 9 print @str 10 execute sp_executesql @str 11 end 12 GO
<补充>需要检查一下有没有这个夹“C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\”,这个文件夹默认存放数据库文件与日志文件,
不同类型与版本的数据库可能稍有不同。
2、创建表

1 /*存储过程-创建表*/ 2 create proc [dbo].[CreateTable](@dataname nvarchar(50),@createstr nvarchar(4000)) 3 as 4 begin 5 declare @str nvarchar(4000) 6 set @str = 'use ' + @dataname + ' ' + @createstr 7 print @str 8 execute sp_executesql @str 9 end 10 GO
3、创建存储过程、视图、触发器

1 /*存储过程-创建存储过程、触发器、视图*/ 2 create proc [dbo].[CreateProc](@dataname nvarchar(50),@createst nvarchar(400)) 3 as 4 begin 5 declare @str nvarchar(400) 6 set @str = N'use ' + @dataname + '; exec sp_executesql N''' + @createst + ''''; 7 print @str 8 execute sp_executesql @str 9 end 10 GO
<补充>这个句子看似简单,但是花了我整整一天才写出来,原本以为它与创建表的T-SQL的结构是类似的,只需要将创建语句打包,然后再execute就行。
但试过之后,却发现不可行,最后还是google,在一个外文论坛上找到的答案。
4、获取表中数据

1 /*存储过程-获取表中数据*/ 2 create proc [dbo].[Select_data](@dataname nvarchar(50),@tablename nvarchar(50)) 3 as 4 begin 5 declare @str nvarchar(200) 6 set @str = 'use ' + @dataname + ' select * from ' + @tablename 7 print @str 8 execute sp_executesql @str 9 end 10 GO
5、获取表数据结构

1 /*存储过程-获取表数据结构*/ 2 create proc [dbo].[Select_datalist](@dataname nvarchar(50),@tablename nvarchar(50)) 3 as 4 begin 5 declare @str nvarchar(2000) 6 set @str = 'use ' + @dataname + ' select Column_id=C.column_id,ColumnName=C.name,PrimaryKey=ISNULL(IDX.PrimaryKey,N''''), 7 [IDENTITY]=CASE when C.is_identity=1 then N''IDENTITY('' + RTRIM(IDENT_SEED(O.name)) + N'' , ''+ RTRIM(IDENT_INCR(O.name)) + N'' )'' else N'''' END, 8 Type=T.name,Length=C.max_length,NullAble=case when C.is_nullable=1 then N''√''else N'''' END,[Default]=isnull(D.definition,N'''')' +' '+ 9 'from sys.columns C inner join sys.objects O on C.[object_id]=O.[object_id] and O.type = ''U'' and O.is_ms_shipped=0'+' '+ 10 'inner join sys.types T on C.user_type_id=T.user_type_id left join sys.default_constraints D on C.[object_id]=D.parent_object_id'+' '+ 11 'and C.column_id=D.parent_column_id and C.default_object_id=D.[object_id] left join sys.extended_properties PFD on PFD.class =1'+' '+ 12 'and C.[object_id]=PFD.major_id and C.column_id=PFD.minor_id left join sys.extended_properties PTB on PTB.class=1 and PTB.minor_id=0'+' '+ 13 'and C.[object_id]=PTB.major_id left join(select IDXC.[object_id],IDXC.column_id,Sort=case INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,''IsDescending'') WHEN 1 THEN ''DESC'' WHEN 0 THEN ''ASC'' ELSE '''' END, 14 PrimaryKey=CASE WHEN IDX.is_primary_key=1 THEN N''√'' else N'''' END, IndexName = IDX.Name from sys.indexes IDX inner join sys.index_columns IDXC'+' '+ 15 'on IDX.[object_id]=IDXC.[object_id] and IDX.index_id=IDXC.index_id left join sys.key_constraints KC on IDX.[object_id]=KC.[parent_object_id] AND IDX.index_id=KC.unique_index_id'+' '+ 16 'inner join(select [object_id],Column_id,index_id=min(index_id) from sys.index_columns group by [object_id],Column_id) IDXCUQ on IDXC.[object_id]=IDXCUQ.[object_id]'+' '+ 17 'and IDXC.Column_id=IDXCUQ.Column_id AND IDXC.index_id=IDXCUQ.index_id) IDX on C.[object_id]=IDX.[object_id] and C.column_id=IDX.column_id where O.name= ''' + @tablename + ''' ORDER BY O.name,C.column_id' 18 print @str 19 execute sp_executesql @str 20 end 21 GO
<补充>这个获取表中数据结构的T-SQL句子也是不容易写的,也许大家不太能完全看懂(由于本人的写法问题),如果是不用显示主键外键的问题的话,这个句子可以
缩短4/5,但是因为要显示主外键问题,所以写了挺多判断的,但大家如果要用的话,尽管可以放心,这个T-SQL语句是一定可用的。
6、获取指定数据库中全部存储过程

1 /*存储过程-获取全部存储过程*/ 2 create proc [dbo].[Select_proc](@dataname nvarchar(50)) 3 as 4 begin 5 declare @str nvarchar(200) 6 set @str = 'use ' + @dataname + ' select SysObjects.name as Procname from Sysobjects where type = ''p''' 7 print @str 8 execute sp_executesql @str 9 select @dataname 10 end 11 GO
7、获取存储过程、触发器、视图脚本

1 CREATE proc [dbo].[Select_script](@dataname nvarchar(50),@scriptname nvarchar(50)) 2 as 3 begin 4 declare @str nvarchar(100) 5 set @str = 'use ' + @dataname + ' select text from syscomments where id=object_id(N'''+@scriptname+ ''')' 6 print @str 7 execute sp_executesql @str 8 select @dataname 9 end 10 GO
8、获取指定数据库中全部表

1 create proc [dbo].[Select_table](@dataname nvarchar(50)) 2 as 3 begin 4 declare @str nvarchar(250) 5 set @str = 'use ' + @dataname + ' select SysObjects.name as Tablename from Sysobjects where xtype = ''U''' 6 print @str 7 execute sp_executesql @str 8 select @dataname 9 end 10 GO
9、获取指定数据库中全部触发器

1 /*存储过程-获取触发器*/ 2 create proc [dbo].[Select_trigger](@dataname nvarchar(50)) 3 as 4 begin 5 declare @str nvarchar(200) 6 set @str = 'use ' + @dataname + ' select name as Triname from sys.triggers' 7 print @str 8 execute sp_executesql @str 9 select @dataname 10 end 11 GO
10、获取指定数据库中全部视图

1 /*存储过程-获取全部视图*/ 2 create proc [dbo].[Select_view](@dataname nvarchar(50)) 3 as 4 begin 5 declare @str nvarchar(200) 6 set @str = 'use ' + @dataname + ' select name as Viewname from sys.views' 7 print @str 8 execute sp_executesql @str 9 select @dataname 10 end 11 GO
11、创建定时作业

1 /*创建作业-参数:作业名、数据库名、备份频率*/ 2 create proc [dbo].[Create_job](@jobname nvarchar(50),@dataname nvarchar(50),@rate nvarchar(5)) 3 as 4 begin 5 /*@rate只能传4、8、16,分别代表日、周、月*/ 6 declare @str nvarchar(2000) 7 set @str = 'declare @jobid uniqueidentifier'+' '+'exec msdb.dbo.sp_add_job'+' '+'@job_name=N'''+@jobname +''', 8 @job_id=@jobid output'+' '+'declare @sql nvarchar(400),@dbname sysname'+' '+'select @dbname=DB_NAME(), 9 @sql=N''exec Back_data'''''+ @dataname +''''''' '+'exec msdb.dbo.sp_add_jobstep' 10 +' '+'@job_id=@jobid,@step_name=N''Step'',@subsystem=''TSQL'',@database_name=N'''+@dataname+''',@command=@sql' 11 +' '+'exec msdb.dbo.sp_add_jobschedule'+' '+'@job_id=@jobid,@name=N''Plan'',@freq_type='+@rate+',@freq_interval=1, 12 @freq_subday_type=1,@freq_subday_interval=0,@freq_relative_interval=0,@freq_recurrence_factor=1,@active_start_date=Null, 13 @active_end_date=99991231,@active_start_time=00000,@active_end_time=235959' 14 +' '+'declare @servername sysname set @servername=convert(nvarchar(128),serverproperty(N''local''))' 15 +' '+'exec msdb.dbo.sp_add_jobserver @job_id=@jobid,@server_name=@servername' 16 print @str 17 execute sp_executesql @str 18 end 19 GO
12、数据备份(同时数据备份名为动态的)

1 /*存储过程-数据备份(时间动态名)*/ 2 create proc [dbo].[Back_data](@dataname nvarchar(50)) 3 as 4 begin 5 declare @str nvarchar(250) 6 set @str = 'backup database '+@dataname+' to disk = ''F:\数据备份\' + @dataname + '_' +substring(replace(replace(replace(CONVERT(varchar, 7 getdate(), 120 ),'-',''),' ',''),':',''),1,12 )+'.bak''' 8 print @str 9 execute sp_executesql @str 10 return 11 end 12 GO
<补充>需要新建立一个文件夹存放备份文件,像我就是建立如下文件夹—“F:\数据备份”。