数据库为网上下载的,想研究学习使用。之前建立的网站被关闭了,数据库小白一枚,想在本地搭建一个,搜了无数教程,前前后后经历了一个半月,终得其法。

接下来教程需要极强的动手能力,个人不建议小白进行操作,网上现在还是有现成的裤子的(当我没说)。

 

 

 

 

一、下载这个版本的SQL SERVER:

  1. 文件名 
  2.     cn_sql_server_2008_r2_developer_x86_x64_ia64_dvd_522724.iso 
  3. SHA1 
  4.     AAE0E2D4E41AB7591634D53C7BC76A112F31B617 
  5. 文件大小 
  6.     4.34GB 
  7. 发布时间 
  8.     2010-05-03 
  9.  
  10. ed2k://|file|cn_sql_server_2008_r2_developer_x86_x64_ia64_dvd_522724.iso|4662884352|E436F05BCB0165FDF7E5E61862AB6BE1|/ 

二、下载的是群号数据库QunInfo(11个)和群成员数据库GroupData(11个)。

1、首先,解压缩,得到两个库总共22个mdf文件(各11个)。打开Microsoft SQL Server Management Studio,菜单栏右上角找到“新建查询按钮”,打开一个空白页面,那是跑脚本的窗口。由于没有log文件,所以采用以下语句附加进数据库(注意QunInfo01~QunInfo11的命名不要改):

  1. --附加数据库(MDF文件路径可根据需要修改) 
  2. sp_attach_single_file_db @dbname'GroupData01',@physname'D:\Backup\Database\QQ\GroupData1.MDF' 
  3. go 
  4. sp_attach_single_file_db @dbname'GroupData02',@physname'D:\Backup\Database\QQ\GroupData2.MDF' 
  5. go 
  6. sp_attach_single_file_db @dbname'GroupData03',@physname'D:\Backup\Database\QQ\GroupData3.MDF' 
  7. go 
  8. sp_attach_single_file_db @dbname'GroupData04',@physname'D:\Backup\Database\QQ\GroupData4.MDF' 
  9. go 
  10. sp_attach_single_file_db @dbname'GroupData05',@physname'D:\Backup\Database\QQ\GroupData5.MDF' 
  11. go 
  12. sp_attach_single_file_db @dbname'GroupData06',@physname'D:\Backup\Database\QQ\GroupData6.MDF' 
  13. go 
  14. sp_attach_single_file_db @dbname'GroupData07',@physname'D:\Backup\Database\QQ\GroupData7.MDF' 
  15. go 
  16. sp_attach_single_file_db @dbname'GroupData08',@physname'D:\Backup\Database\QQ\GroupData8.MDF' 
  17. go 
  18. sp_attach_single_file_db @dbname'GroupData09',@physname'D:\Backup\Database\QQ\GroupData9.MDF' 
  19. go 
  20. sp_attach_single_file_db @dbname'GroupData10',@physname'D:\Backup\Database\QQ\GroupData10.MDF' 
  21. go 
  22. sp_attach_single_file_db @dbname'GroupData11',@physname'D:\Backup\Database\QQ\GroupData11.MDF' 
  23. go 
  24. sp_attach_single_file_db @dbname'QunInfo01',@physname'D:\Backup\Database\QQ\QunInfo1.MDF' 
  25. go 
  26. sp_attach_single_file_db @dbname'QunInfo02',@physname'D:\Backup\Database\QQ\QunInfo2.MDF' 
  27. go 
  28. sp_attach_single_file_db @dbname'QunInfo03',@physname'D:\Backup\Database\QQ\QunInfo3.MDF' 
  29. go 
  30. sp_attach_single_file_db @dbname'QunInfo04',@physname'D:\Backup\Database\QQ\QunInfo4.MDF' 
  31. go 
  32. sp_attach_single_file_db @dbname'QunInfo05',@physname'D:\Backup\Database\QQ\QunInfo5.MDF' 
  33. go 
  34. sp_attach_single_file_db @dbname'QunInfo06',@physname'D:\Backup\Database\QQ\QunInfo6.MDF' 
  35. go 
  36. sp_attach_single_file_db @dbname'QunInfo07',@physname'D:\Backup\Database\QQ\QunInfo7.MDF' 
  37. go 
  38. sp_attach_single_file_db @dbname'QunInfo08',@physname'D:\Backup\Database\QQ\QunInfo8.MDF' 
  39. go 
  40. sp_attach_single_file_db @dbname'QunInfo09',@physname'D:\Backup\Database\QQ\QunInfo9.MDF' 
  41. go 
  42. sp_attach_single_file_db @dbname'QunInfo10',@physname'D:\Backup\Database\QQ\QunInfo10.MDF' 
  43. go 
  44. sp_attach_single_file_db @dbname'QunInfo11',@physname'D:\Backup\Database\QQ\QunInfo11.MDF' 
  45. go 

将上述脚本拷贝到空白窗口,修改MDF文件路径后点击工具栏带红色感叹号的“执行”按钮。每一条语句,就是附加一个MDF文件。这样,就得到了22个数据库,QunInfo01~11包含成千个表,这样很不方便查询。虽然可以查询使用,但耗时漫长,效率很低,占用磁盘空间也大,所以我们要优化一下数据库。目的是:提高查询速度跟效率;减少磁盘空间占用。

2、把QunInfo01~11、GroupData01~11分别合并到两个库QunInfo、GroupData,由于数据量太大,用分区表提升性能。方案如下:重新设计表结构,优化表空间设计分区方案合并数据库:使用行压缩,压缩行数据建立索引,优化查询速度最终效果,查询可以秒出结果。

3、创建新的库用于合并

创建一个名为QunInfo的数据库,设置数据库为简单恢复模式。

  1. mdf、ldf文件保存路径可根据需要更改,脚本如下 
  2.  
  3. USE [master] 
  4. GO 
  5. CREATE DATABASE [QunInfo] ON  PRIMARY  
  6. NAME = N'QunInfo'FILENAME = N'D:\Backup\Database\QQ\QunInfo.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ) 
  7.  LOG ON  
  8. NAME = N'QunInfo_log'FILENAME = N'D:\Backup\Database\QQ\QunInfo_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) 
  9. GO 
  10.  
  11. ALTER DATABASE [QunInfo] SET COMPATIBILITY_LEVEL = 100 
  12. GO 
  13.  
  14. IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) 
  15. begin 
  16. EXEC [QunInfo].[dbo].[sp_fulltext_database] @action = 'enable' 
  17. end 
  18. GO 
  19.  
  20. ALTER DATABASE [QunInfo] SET ANSI_NULL_DEFAULT OFF  
  21. GO 
  22.  
  23. ALTER DATABASE [QunInfo] SET ANSI_NULLS OFF  
  24. GO 
  25.  
  26. ALTER DATABASE [QunInfo] SET ANSI_PADDING OFF  
  27. GO 
  28.  
  29. ALTER DATABASE [QunInfo] SET ANSI_WARNINGS OFF  
  30. GO 
  31.  
  32. ALTER DATABASE [QunInfo] SET ARITHABORT OFF  
  33. GO 
  34.  
  35. ALTER DATABASE [QunInfo] SET AUTO_CLOSE OFF  
  36. GO 
  37.  
  38. ALTER DATABASE [QunInfo] SET AUTO_CREATE_STATISTICS ON  
  39. GO 
  40.  
  41. ALTER DATABASE [QunInfo] SET AUTO_SHRINK OFF  
  42. GO 
  43.  
  44. ALTER DATABASE [QunInfo] SET AUTO_UPDATE_STATISTICS ON  
  45. GO 
  46.  
  47. ALTER DATABASE [QunInfo] SET CURSOR_CLOSE_ON_COMMIT OFF  
  48. GO 
  49.  
  50. ALTER DATABASE [QunInfo] SET CURSOR_DEFAULT  GLOBAL  
  51. GO 
  52.  
  53. ALTER DATABASE [QunInfo] SET CONCAT_NULL_YIELDS_NULL OFF  
  54. GO 
  55.  
  56. ALTER DATABASE [QunInfo] SET NUMERIC_ROUNDABORT OFF  
  57. GO 
  58.  
  59. ALTER DATABASE [QunInfo] SET QUOTED_IDENTIFIER OFF  
  60. GO 
  61.  
  62. ALTER DATABASE [QunInfo] SET RECURSIVE_TRIGGERS OFF  
  63. GO 
  64.  
  65. ALTER DATABASE [QunInfo] SET  DISABLE_BROKER  
  66. GO 
  67.  
  68. ALTER DATABASE [QunInfo] SET AUTO_UPDATE_STATISTICS_ASYNC OFF  
  69. GO 
  70.  
  71. ALTER DATABASE [QunInfo] SET DATE_CORRELATION_OPTIMIZATION OFF  
  72. GO 
  73.  
  74. ALTER DATABASE [QunInfo] SET TRUSTWORTHY OFF  
  75. GO 
  76.  
  77. ALTER DATABASE [QunInfo] SET ALLOW_SNAPSHOT_ISOLATION OFF  
  78. GO 
  79.  
  80. ALTER DATABASE [QunInfo] SET PARAMETERIZATION SIMPLE  
  81. GO 
  82.  
  83. ALTER DATABASE [QunInfo] SET READ_COMMITTED_SNAPSHOT OFF  
  84. GO 
  85.  
  86. ALTER DATABASE [QunInfo] SET HONOR_BROKER_PRIORITY OFF  
  87. GO 
  88.  
  89. ALTER DATABASE [QunInfo] SET  READ_WRITE  
  90. GO 
  91.  
  92. ALTER DATABASE [QunInfo] SET RECOVERY SIMPLE  
  93. GO 
  94.  
  95. ALTER DATABASE [QunInfo] SET  MULTI_USER  
  96. GO 
  97.  
  98. ALTER DATABASE [QunInfo] SET PAGE_VERIFY CHECKSUM   
  99. GO 
  100.  
  101. ALTER DATABASE [QunInfo] SET DB_CHAINING OFF  
  102. GO 

 

 创建一个名字为GroupData的库,配置同上:

  1. USE [master] 
  2. GO 
  3. CREATE DATABASE [GroupData] ON  PRIMARY  
  4. NAME = N'GroupData'FILENAME = N'D:\Backup\Database\QQ\GroupData.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITEDFILEGROWTH = 1024KB ) 
  5.  LOG ON  
  6. NAME = N'GroupData_log'FILENAME = N'D:\Backup\Database\QQ\GroupData_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) 
  7. GO 
  8.  
  9. ALTER DATABASE [GroupData] SET COMPATIBILITY_LEVEL = 100 
  10. GO 
  11.  
  12. IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) 
  13. begin 
  14. EXEC [GroupData].[dbo].[sp_fulltext_database] @action = 'enable' 
  15. end 
  16. GO 
  17.  
  18. ALTER DATABASE [GroupData] SET ANSI_NULL_DEFAULT OFF  
  19. GO 
  20.  
  21. ALTER DATABASE [GroupData] SET ANSI_NULLS OFF  
  22. GO 
  23.  
  24. ALTER DATABASE [GroupData] SET ANSI_PADDING OFF  
  25. GO 
  26.  
  27. ALTER DATABASE [GroupData] SET ANSI_WARNINGS OFF  
  28. GO 
  29.  
  30. ALTER DATABASE [GroupData] SET ARITHABORT OFF  
  31. GO 
  32.  
  33. ALTER DATABASE [GroupData] SET AUTO_CLOSE OFF  
  34. GO 
  35.  
  36. ALTER DATABASE [GroupData] SET AUTO_CREATE_STATISTICS ON  
  37. GO 
  38.  
  39. ALTER DATABASE [GroupData] SET AUTO_SHRINK OFF  
  40. GO 
  41.  
  42. ALTER DATABASE [GroupData] SET AUTO_UPDATE_STATISTICS ON  
  43. GO 
  44.  
  45. ALTER DATABASE [GroupData] SET CURSOR_CLOSE_ON_COMMIT OFF  
  46. GO 
  47.  
  48. ALTER DATABASE [GroupData] SET CURSOR_DEFAULT  GLOBAL  
  49. GO 
  50.  
  51. ALTER DATABASE [GroupData] SET CONCAT_NULL_YIELDS_NULL OFF  
  52. GO 
  53.  
  54. ALTER DATABASE [GroupData] SET NUMERIC_ROUNDABORT OFF  
  55. GO 
  56.  
  57. ALTER DATABASE [GroupData] SET QUOTED_IDENTIFIER OFF  
  58. GO 
  59.  
  60. ALTER DATABASE [GroupData] SET RECURSIVE_TRIGGERS OFF  
  61. GO 
  62.  
  63. ALTER DATABASE [GroupData] SET  DISABLE_BROKER  
  64. GO 
  65.  
  66. ALTER DATABASE [GroupData] SET AUTO_UPDATE_STATISTICS_ASYNC OFF  
  67. GO 
  68.  
  69. ALTER DATABASE [GroupData] SET DATE_CORRELATION_OPTIMIZATION OFF  
  70. GO 
  71.  
  72. ALTER DATABASE [GroupData] SET TRUSTWORTHY OFF  
  73. GO 
  74.  
  75. ALTER DATABASE [GroupData] SET ALLOW_SNAPSHOT_ISOLATION OFF  
  76. GO 
  77.  
  78. ALTER DATABASE [GroupData] SET PARAMETERIZATION SIMPLE  
  79. GO 
  80.  
  81. ALTER DATABASE [GroupData] SET READ_COMMITTED_SNAPSHOT OFF  
  82. GO 
  83.  
  84. ALTER DATABASE [GroupData] SET HONOR_BROKER_PRIORITY OFF  
  85. GO 
  86.  
  87. ALTER DATABASE [GroupData] SET  READ_WRITE  
  88. GO 
  89.  
  90. ALTER DATABASE [GroupData] SET RECOVERY SIMPLE  
  91. GO 
  92.  
  93. ALTER DATABASE [GroupData] SET  MULTI_USER  
  94. GO 
  95.  
  96. ALTER DATABASE [GroupData] SET PAGE_VERIFY CHECKSUM   
  97. GO 
  98.  
  99. ALTER DATABASE [GroupData] SET DB_CHAINING OFF  
  100. GO 

4、修改各个数据库中表的名字:把QunList1统一修改为QunList01这样格式的,这样做的好处就是在合并数据的时候读取到的数据库的数据是按照顺序插入到表中的,不会造成数据页的拆分。

  1. --格式化表名 
  2. USE QunInfo01 
  3. GO 
  4. exec sp_rename 'QunList1','QunList01' 
  5. exec sp_rename 'QunList2','QunList02' 
  6. exec sp_rename 'QunList3','QunList03' 
  7. exec sp_rename 'QunList4','QunList04' 
  8. exec sp_rename 'QunList5','QunList05' 
  9. exec sp_rename 'QunList6','QunList06' 
  10. exec sp_rename 'QunList7','QunList07' 
  11. exec sp_rename 'QunList8','QunList08' 
  12. exec sp_rename 'QunList9','QunList09' 
  13.  
  14. USE GroupData01 
  15. GO 
  16. exec sp_rename 'Group1','Group01' 
  17. exec sp_rename 'Group2','Group02' 
  18. exec sp_rename 'Group3','Group03' 
  19. exec sp_rename 'Group4','Group04' 
  20. exec sp_rename 'Group5','Group05' 
  21. exec sp_rename 'Group6','Group06' 
  22. exec sp_rename 'Group7','Group07' 
  23. exec sp_rename 'Group8','Group08' 
  24. exec sp_rename 'Group9','Group09' 

在QunInfo、GroupData数据库中分别创建一个临时表:tables,用来保存所有的数据库与表的信息,提供数据库合并用。

  1. --创建临时表 
  2. use [QunInfo] 
  3. CREATE TABLE [QunInfo].[dbo].[tables]( 
  4.     [db_name] [sysname] NULL, 
  5.     [table_name] [sysname] NULL, 
  6.     [status] [bit] default 0 
  7. ) ON [PRIMARY] 
  8.  
  9. --生成数据库名称与表名称的对应列表 
  10. EXEC sp_MSForEachDB 'USE [?]; 
  11.     --插入表信息 
  12.     INSERT INTO [QunInfo].[dbo].[tables]([table_name]) 
  13.         SELECT name from [?].sys.tables where name like ''QunList%'' order by name 
  14.     --更新数据库名称 
  15.     UPDATE [QunInfo].[dbo].[tables] SET [db_name] = ''?'' WHERE [db_name] is NULL' 
  16.  
  17. use [GroupData] 
  18. --创建临时表 
  19. CREATE TABLE [GroupData].[dbo].[tables]( 
  20.     [db_name] [sysname] NULL, 
  21.     [table_name] [sysname] NULL, 
  22.     [status] [bit] default 0 
  23. ) ON [PRIMARY] 
  24.  
  25. --生成数据库名称与表名称的对应列表 
  26. EXEC sp_MSForEachDB 'USE [?]; 
  27.     --插入表信息 
  28.     INSERT INTO [GroupData].[dbo].[tables]([table_name]) 
  29.         SELECT name from [?].sys.tables where name like ''Group%'' order by name 
  30.     --更新数据库名称 
  31.     UPDATE [GroupData].[dbo].[tables] SET [db_name] = ''?'' WHERE [db_name] IS NULL' 

5、对大数据表分区可以加快查询速度。经过估算,所有表格数据加起来近9千万行。我们查询的时候大多用群号字段,所以用这个群号的字段[QunNum]作为分区,每一千万做一个分区,最大的群号为100219998,这样就有11个分区。以下是分区脚本:

  1. USE [QunInfo] 
  2. GO 
  3.  
  4. --1.创建文件组 
  5. ALTER DATABASE [QunInfo] 
  6. ADD FILEGROUP [FG_QunList_QunNum_01] 
  7.  
  8. ALTER DATABASE [QunInfo] 
  9. ADD FILEGROUP [FG_QunList_QunNum_02] 
  10.  
  11. ALTER DATABASE [QunInfo] 
  12. ADD FILEGROUP [FG_QunList_QunNum_03] 
  13.  
  14. ALTER DATABASE [QunInfo] 
  15. ADD FILEGROUP [FG_QunList_QunNum_04] 
  16.  
  17. ALTER DATABASE [QunInfo] 
  18. ADD FILEGROUP [FG_QunList_QunNum_05] 
  19.  
  20. ALTER DATABASE [QunInfo] 
  21. ADD FILEGROUP [FG_QunList_QunNum_06] 
  22.  
  23. ALTER DATABASE [QunInfo] 
  24. ADD FILEGROUP [FG_QunList_QunNum_07] 
  25.  
  26. ALTER DATABASE [QunInfo] 
  27. ADD FILEGROUP [FG_QunList_QunNum_08] 
  28.  
  29. ALTER DATABASE [QunInfo] 
  30. ADD FILEGROUP [FG_QunList_QunNum_09] 
  31.  
  32. ALTER DATABASE [QunInfo] 
  33. ADD FILEGROUP [FG_QunList_QunNum_10] 
  34.  
  35. ALTER DATABASE [QunInfo] 
  36. ADD FILEGROUP [FG_QunList_QunNum_11] 
  37.  
  38.  
  39. --2.创建文件 
  40. ALTER DATABASE [QunInfo] 
  41. ADD FILE 
  42. (NAME = N'FG_QunList_QunNum_01_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_01_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  43. TO FILEGROUP [FG_QunList_QunNum_01]; 
  44.  
  45. ALTER DATABASE [QunInfo] 
  46. ADD FILE 
  47. (NAME = N'FG_QunList_QunNum_02_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_02_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  48. TO FILEGROUP [FG_QunList_QunNum_02]; 
  49.  
  50. ALTER DATABASE [QunInfo] 
  51. ADD FILE 
  52. (NAME = N'FG_QunList_QunNum_03_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_03_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  53. TO FILEGROUP [FG_QunList_QunNum_03]; 
  54.  
  55. ALTER DATABASE [QunInfo] 
  56. ADD FILE 
  57. (NAME = N'FG_QunList_QunNum_04_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_04_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  58. TO FILEGROUP [FG_QunList_QunNum_04]; 
  59.  
  60. ALTER DATABASE [QunInfo] 
  61. ADD FILE 
  62. (NAME = N'FG_QunList_QunNum_05_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_05_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  63. TO FILEGROUP [FG_QunList_QunNum_05]; 
  64.  
  65. ALTER DATABASE [QunInfo] 
  66. ADD FILE 
  67. (NAME = N'FG_QunList_QunNum_06_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_06_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  68. TO FILEGROUP [FG_QunList_QunNum_06]; 
  69.  
  70. ALTER DATABASE [QunInfo] 
  71. ADD FILE 
  72. (NAME = N'FG_QunList_QunNum_07_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_07_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  73. TO FILEGROUP [FG_QunList_QunNum_07]; 
  74.  
  75. ALTER DATABASE [QunInfo] 
  76. ADD FILE 
  77. (NAME = N'FG_QunList_QunNum_08_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_08_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  78. TO FILEGROUP [FG_QunList_QunNum_08]; 
  79.  
  80. ALTER DATABASE [QunInfo] 
  81. ADD FILE 
  82. (NAME = N'FG_QunList_QunNum_09_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_09_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  83. TO FILEGROUP [FG_QunList_QunNum_09]; 
  84.  
  85. ALTER DATABASE [QunInfo] 
  86. ADD FILE 
  87. (NAME = N'FG_QunList_QunNum_10_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_10_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  88. TO FILEGROUP [FG_QunList_QunNum_10]; 
  89.  
  90. ALTER DATABASE [QunInfo] 
  91. ADD FILE 
  92. (NAME = N'FG_QunList_QunNum_11_data',FILENAME = N'D:\Backup\Database\QQ\FG_QunList_QunNum_11_data.ndf',SIZE = 100MBFILEGROWTH = 10MB ) 
  93. TO FILEGROUP [FG_QunList_QunNum_11]; 
  94.  
  95.  
  96. --3.创建分区函数 
  97. CREATE PARTITION FUNCTION 
  98. [Fun_QunList_QunNum](INT) AS 
  99. RANGE RIGHT 
  100. FOR VALUES(10000000,20000000,30000000,40000000,50000000,60000000,70000000,80000000,90000000,100000000) 
  101.  
  102.  
  103. --4.创建分区方案 
  104. CREATE PARTITION SCHEME 
  105. [Sch_QunList_QunNum] AS 
  106. PARTITION [Fun_QunList_QunNum] 
  107. TO([FG_QunList_QunNum_01],[FG_QunList_QunNum_02],[FG_QunList_QunNum_03],[FG_QunList_QunNum_04],[FG_QunList_QunNum_05],[FG_QunList_QunNum_06],[FG_QunList_QunNum_07],[FG_QunList_QunNum_08],[FG_QunList_QunNum_09],[FG_QunList_QunNum_10],[FG_QunList_QunNum_11]) 
  108.  
  109.  
  110. --5.分区函数的记录数 
  111. SELECT $PARTITION.[Fun_QunList_QunNum](QunNum) AS Partition_num, 
  112.   MIN(QunNum) AS Min_value,MAX(QunNum) AS Max_value,COUNT(1) AS Record_num 
  113. FROM dbo.[QunList] 
  114. GROUP BY $PARTITION.[Fun_QunList_QunNum](QunNum) 
  115. ORDER BY $PARTITION.[Fun_QunList_QunNum](QunNum); 

GroupData01~11里面的数据大概有15亿,以群号作为分区依据,每五百万为一组,可分为21个文件组:
 

  1. USE [GroupData] 
  2. GO 
  3.  
  4. --1.创建文件组 
  5. ALTER DATABASE [GroupData] 
  6. ADD FILEGROUP [FG_Group_QunNum_01] 
  7.  
  8. ALTER DATABASE [GroupData] 
  9. ADD FILEGROUP [FG_Group_QunNum_02] 
  10.  
  11. ALTER DATABASE [GroupData] 
  12. ADD FILEGROUP [FG_Group_QunNum_03] 
  13.  
  14. ALTER DATABASE [GroupData] 
  15. ADD FILEGROUP [FG_Group_QunNum_04] 
  16.  
  17. ALTER DATABASE [GroupData] 
  18. ADD FILEGROUP [FG_Group_QunNum_05] 
  19.  
  20. ALTER DATABASE [GroupData] 
  21. ADD FILEGROUP [FG_Group_QunNum_06] 
  22.  
  23. ALTER DATABASE [GroupData] 
  24. ADD FILEGROUP [FG_Group_QunNum_07] 
  25.  
  26. ALTER DATABASE [GroupData] 
  27. ADD FILEGROUP [FG_Group_QunNum_08] 
  28.  
  29. ALTER DATABASE [GroupData] 
  30. ADD FILEGROUP [FG_Group_QunNum_09] 
  31.  
  32. ALTER DATABASE [GroupData] 
  33. ADD FILEGROUP [FG_Group_QunNum_10] 
  34.  
  35. ALTER DATABASE [GroupData] 
  36. ADD FILEGROUP [FG_Group_QunNum_11] 
  37.  
  38. ALTER DATABASE [GroupData] 
  39. ADD FILEGROUP [FG_Group_QunNum_12] 
  40.  
  41. ALTER DATABASE [GroupData] 
  42. ADD FILEGROUP [FG_Group_QunNum_13] 
  43.  
  44. ALTER DATABASE [GroupData] 
  45. ADD FILEGROUP [FG_Group_QunNum_14] 
  46.  
  47. ALTER DATABASE [GroupData] 
  48. ADD FILEGROUP [FG_Group_QunNum_15] 
  49.  
  50. ALTER DATABASE [GroupData] 
  51. ADD FILEGROUP [FG_Group_QunNum_16] 
  52.  
  53. ALTER DATABASE [GroupData] 
  54. ADD FILEGROUP [FG_Group_QunNum_17] 
  55.  
  56. ALTER DATABASE [GroupData] 
  57. ADD FILEGROUP [FG_Group_QunNum_18] 
  58.  
  59. ALTER DATABASE [GroupData] 
  60. ADD FILEGROUP [FG_Group_QunNum_19] 
  61.  
  62. ALTER DATABASE [GroupData] 
  63. ADD FILEGROUP [FG_Group_QunNum_20] 
  64.  
  65. ALTER DATABASE [GroupData] 
  66. ADD FILEGROUP [FG_Group_QunNum_21] 
  67.  
  68.  
  69. --2.创建文件 
  70. ALTER DATABASE [GroupData] 
  71. ADD FILE 
  72. (NAME = N'FG_Group_QunNum_01_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_01_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  73. TO FILEGROUP [FG_Group_QunNum_01]; 
  74.  
  75. ALTER DATABASE [GroupData] 
  76. ADD FILE 
  77. (NAME = N'FG_Group_QunNum_02_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_02_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  78. TO FILEGROUP [FG_Group_QunNum_02]; 
  79.  
  80. ALTER DATABASE [GroupData] 
  81. ADD FILE 
  82. (NAME = N'FG_Group_QunNum_03_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_03_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  83. TO FILEGROUP [FG_Group_QunNum_03]; 
  84.  
  85. ALTER DATABASE [GroupData] 
  86. ADD FILE 
  87. (NAME = N'FG_Group_QunNum_04_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_04_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  88. TO FILEGROUP [FG_Group_QunNum_04]; 
  89.  
  90. ALTER DATABASE [GroupData] 
  91. ADD FILE 
  92. (NAME = N'FG_Group_QunNum_05_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_05_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  93. TO FILEGROUP [FG_Group_QunNum_05]; 
  94.  
  95. ALTER DATABASE [GroupData] 
  96. ADD FILE 
  97. (NAME = N'FG_Group_QunNum_06_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_06_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  98. TO FILEGROUP [FG_Group_QunNum_06]; 
  99.  
  100. ALTER DATABASE [GroupData] 
  101. ADD FILE 
  102. (NAME = N'FG_Group_QunNum_07_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_07_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  103. TO FILEGROUP [FG_Group_QunNum_07]; 
  104.  
  105. ALTER DATABASE [GroupData] 
  106. ADD FILE 
  107. (NAME = N'FG_Group_QunNum_08_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_08_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  108. TO FILEGROUP [FG_Group_QunNum_08]; 
  109.  
  110. ALTER DATABASE [GroupData] 
  111. ADD FILE 
  112. (NAME = N'FG_Group_QunNum_09_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_09_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  113. TO FILEGROUP [FG_Group_QunNum_09]; 
  114.  
  115. ALTER DATABASE [GroupData] 
  116. ADD FILE 
  117. (NAME = N'FG_Group_QunNum_10_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_10_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  118. TO FILEGROUP [FG_Group_QunNum_10]; 
  119.  
  120. ALTER DATABASE [GroupData] 
  121. ADD FILE 
  122. (NAME = N'FG_Group_QunNum_11_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_11_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  123. TO FILEGROUP [FG_Group_QunNum_11]; 
  124.  
  125. ALTER DATABASE [GroupData] 
  126. ADD FILE 
  127. (NAME = N'FG_Group_QunNum_12_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_12_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  128. TO FILEGROUP [FG_Group_QunNum_12]; 
  129.  
  130. ALTER DATABASE [GroupData] 
  131. ADD FILE 
  132. (NAME = N'FG_Group_QunNum_13_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_13_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  133. TO FILEGROUP [FG_Group_QunNum_13]; 
  134.  
  135. ALTER DATABASE [GroupData] 
  136. ADD FILE 
  137. (NAME = N'FG_Group_QunNum_14_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_14_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  138. TO FILEGROUP [FG_Group_QunNum_14]; 
  139.  
  140. ALTER DATABASE [GroupData] 
  141. ADD FILE 
  142. (NAME = N'FG_Group_QunNum_15_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_15_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  143. TO FILEGROUP [FG_Group_QunNum_15]; 
  144.  
  145. ALTER DATABASE [GroupData] 
  146. ADD FILE 
  147. (NAME = N'FG_Group_QunNum_16_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_16_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  148. TO FILEGROUP [FG_Group_QunNum_16]; 
  149.  
  150. ALTER DATABASE [GroupData] 
  151. ADD FILE 
  152. (NAME = N'FG_Group_QunNum_17_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_17_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  153. TO FILEGROUP [FG_Group_QunNum_17]; 
  154.  
  155. ALTER DATABASE [GroupData] 
  156. ADD FILE 
  157. (NAME = N'FG_Group_QunNum_18_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_18_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  158. TO FILEGROUP [FG_Group_QunNum_18]; 
  159.  
  160. ALTER DATABASE [GroupData] 
  161. ADD FILE 
  162. (NAME = N'FG_Group_QunNum_19_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_19_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  163. TO FILEGROUP [FG_Group_QunNum_19]; 
  164.  
  165. ALTER DATABASE [GroupData] 
  166. ADD FILE 
  167. (NAME = N'FG_Group_QunNum_20_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_20_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  168. TO FILEGROUP [FG_Group_QunNum_20]; 
  169.  
  170. ALTER DATABASE [GroupData] 
  171. ADD FILE 
  172. (NAME = N'FG_Group_QunNum_21_data',FILENAME = N'D:\Backup\Database\QQ\FG_Group_QunNum_21_data.ndf',SIZE = 4096MBFILEGROWTH = 100MB ) 
  173. TO FILEGROUP [FG_Group_QunNum_21]; 
  174.  
  175.  
  176. --3.创建分区函数 
  177. CREATE PARTITION FUNCTION 
  178. [Fun_Group_QunNum](INT) AS 
  179. RANGE RIGHT 
  180. FOR VALUES(5000000,10000000,15000000,20000000,25000000,30000000,35000000,40000000,45000000,50000000,55000000,60000000,65000000,70000000,75000000,80000000,85000000,90000000,95000000,100000000) 
  181.  
  182.  
  183. --4.创建分区方案 
  184. CREATE PARTITION SCHEME 
  185. [Sch_Group_QunNum] AS 
  186. PARTITION [Fun_Group_QunNum] 
  187. TO([FG_Group_QunNum_01],[FG_Group_QunNum_02],[FG_Group_QunNum_03],[FG_Group_QunNum_04],[FG_Group_QunNum_05],[FG_Group_QunNum_06],[FG_Group_QunNum_07],[FG_Group_QunNum_08],[FG_Group_QunNum_09],[FG_Group_QunNum_10],[FG_Group_QunNum_11],[FG_Group_QunNum_12],[FG_Group_QunNum_13],[FG_Group_QunNum_14],[FG_Group_QunNum_15],[FG_Group_QunNum_16],[FG_Group_QunNum_17],[FG_Group_QunNum_18],[FG_Group_QunNum_19],[FG_Group_QunNum_20],[FG_Group_QunNum_21]) 
  188.  
  189.  
  190. --5.分区函数的记录数 
  191. SELECT $PARTITION.[Fun_Group_QunNum](QunNum) AS Partition_num, 
  192.   MIN(QunNum) AS Min_value,MAX(QunNum) AS Max_value,COUNT(1) AS Record_num 
  193. FROM dbo.[Group] 
  194. GROUP BY $PARTITION.[Fun_Group_QunNum](QunNum) 
  195. ORDER BY $PARTITION.[Fun_Group_QunNum](QunNum); 

6、接下来在数据库[QunInfo]新建一个QunList表用于合并QunInfo01~11的所有表格,涉及内容如下:1) 在QunInfo数据库中创建分区表QunList,去掉没有太大意义的ID字段;2) 以[QunNum]作为聚集索引,而且是唯一的,这个需要开启IGNORE_DUP_KEY = ON选项,这样才可以在批量插入的时候忽略重复值;3) 对原表的[MastQQ]字段从int类型变成smallint ,[CreateDate]字段从varchar(10)类型变为date,数据类型修改是为了减少表占用的空间;4) 使用刚刚创建好的分区方案,之后创建的索引进行索引对齐;5) 对表使用行压缩,减少数据库占用空间。脚本如下:
 

  1. --创建优化后的QunList表 
  2. use [QunInfo] 
  3. CREATE TABLE [dbo].[QunList]( 
  4.     [QunNum] [int] NOT NULL, 
  5.     [MastQQ] [smallint] NULL, 
  6.     [CreateDate] [date] NULL, 
  7.     [Title] [varchar](22) NULL, 
  8.     [Class] [varchar](38) NULL, 
  9.     [QunText] [varchar](80) NULL, 
  10.  CONSTRAINT [PK_QunList2] PRIMARY KEY CLUSTERED  
  11.     [QunNum] ASC 
  12. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFIGNORE_DUP_KEY = ONALLOW_ROW_LOCKS  = ONALLOW_PAGE_LOCKS  = ONDATA_COMPRESSION = ROW) ON [Sch_QunList_QunNum]([QunNum]) 
  13. ) ON [Sch_QunList_QunNum]([QunNum]) 
  14. GO 

同理对GroupData进行同样的操作,新建一个Group表:

  1. use GroupData 
  2. CREATE TABLE [dbo].[Group]( 
  3.     [QunNum] [int] NOT NULL, 
  4.     [QQNum] [int] NOT NULL, 
  5.     [Nick] [varchar](20) NULL, 
  6.     [Age] [tinyint] NULL, 
  7.     [Gender] [tinyint] NULL, 
  8.     [Auth] [tinyint] NULL, 
  9.  CONSTRAINT [PK_Group] PRIMARY KEY CLUSTERED  
  10.     [QunNum] ASC, 
  11.     [QQNum] ASC 
  12. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFIGNORE_DUP_KEY = ONALLOW_ROW_LOCKS  = ONALLOW_PAGE_LOCKS  = ONDATA_COMPRESSION = ROW) ON [Sch_Group_QunNum]([QunNum]) 
  13. ) ON [Sch_Group_QunNum]([QunNum]) 
  14. GO 

7、数据表合并

把11个数据库都合并到新创建的QunInfo的QunList表中(根据电脑性能,大概要跑一两个小时):

  1. --合并数据 
  2. DECLARE @tablename sysname 
  3. DECLARE @dbname sysname 
  4. DECLARE @sql NVARCHAR(max) 
  5.  
  6. --游标 
  7. DECLARE @itemCur CURSOR 
  8. SET @itemCur = CURSOR FOR  
  9.     SELECT db_name,table_name from [QunInfo].[dbo].[tables] 
  10.  
  11. OPEN @itemCur 
  12. FETCH NEXT FROM @itemCur INTO @dbname,@tablename 
  13. WHILE @@FETCH_STATUS=0 
  14.  
  15. BEGIN 
  16.      
  17.     SET @sql = ' 
  18.     INSERT INTO [QunInfo].[dbo].[QunList] 
  19.            ([QunNum] 
  20.            ,[MastQQ] 
  21.            ,[CreateDate] 
  22.            ,[Title] 
  23.            ,[Class] 
  24.            ,[QunText]) 
  25.     SELECT [QunNum] 
  26.       ,[MastQQ] 
  27.       ,[CreateDate] 
  28.       ,[Title] 
  29.       ,[Class] 
  30.       ,[QunText] 
  31.     FROM ['+@dbname+'].[dbo].['+@tablename+']' 
  32.    
  33.     EXEC(@sql) 
  34.      
  35.     UPDATE [QunInfo].[dbo].[tables] SET status = 1 WHERE db_name = @dbname AND table_name = @tablename 
  36.      
  37.     --返回SQL 
  38.     PRINT(@sql)PRINT('GO')+CHAR(13) 
  39.  
  40.     FETCH NEXT FROM @itemCur INTO @dbname,@tablename 
  41. END  
  42.  
  43. CLOSE @itemCur 
  44. DEALLOCATE @itemCur 
  45.  
  46.  
  47. --运行插入脚本时,可以查看进度 
  48. SELECT * from [QunInfo].[dbo].[tables] 

把GroupData01~11里的数据合并到GroupData库里的Group表(大概跑几个小时,老爷机另算):

  1. --合并数据 
  2. DECLARE @tablename sysname 
  3. DECLARE @dbname sysname 
  4. DECLARE @sql NVARCHAR(max) 
  5.  
  6. --游标 
  7. DECLARE @itemCur CURSOR 
  8. SET @itemCur = CURSOR FOR  
  9.     SELECT db_name,table_name from [GroupData].[dbo].[tables] 
  10.  
  11. OPEN @itemCur 
  12. FETCH NEXT FROM @itemCur INTO @dbname,@tablename 
  13. WHILE @@FETCH_STATUS=0 
  14.  
  15. BEGIN 
  16.      
  17.     SET @sql = ' 
  18. INSERT INTO [GroupData].[dbo].[Group] 
  19.            ([QunNum] 
  20.            ,[QQNum] 
  21.            ,[Nick] 
  22.            ,[Age] 
  23.            ,[Gender] 
  24.            ,[Auth]) 
  25.     SELECT [QunNum] 
  26.            ,[QQNum] 
  27.            ,[Nick] 
  28.            ,[Age] 
  29.            ,[Gender] 
  30.            ,[Auth] 
  31.     FROM ['+@dbname+'].[dbo].['+@tablename+']' 
  32.    
  33.     EXEC(@sql) 
  34.      
  35.     UPDATE [GroupData].[dbo].[tables] SET status = 1 WHERE db_name = @dbname AND table_name = @tablename 
  36.      
  37.     --返回SQL 
  38.     PRINT(@sql)PRINT('GO')+CHAR(13) 
  39.  
  40.     FETCH NEXT FROM @itemCur INTO @dbname,@tablename 
  41. END  
  42.  
  43. CLOSE @itemCur 
  44. DEALLOCATE @itemCur 

为GroupData的Group表里的QQnum新建一个索引:

  1. --索引行压缩 
  2. CREATE NONCLUSTERED INDEX [IX_Group_QQNum] ON [dbo].[Group]  
  3.     [QQNum] ASC 
  4. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFSORT_IN_TEMPDB = OFFIGNORE_DUP_KEY = OFFDROP_EXISTING = OFFONLINE = OFFALLOW_ROW_LOCKS  = ONALLOW_PAGE_LOCKS  = ONDATA_COMPRESSION = ROW) ON [Sch_Group_QunNum]([QunNum]) 
  5. GO 

8、上面数据插入时已经做了行压缩,接下来对QunInfo进行页压缩:

  1. --页压缩 
  2. ALTER TABLE [QunList]   
  3. REBUILD WITH (DATA_COMPRESSION = PAGE ); 
  4. --对GroupData进行页压缩: 
  5. --索引页压缩 
  6. CREATE NONCLUSTERED INDEX [IX_Group_QQNum] ON [dbo].[Group]  
  7.     [QQNum] ASC 
  8. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFSORT_IN_TEMPDB = OFFIGNORE_DUP_KEY = OFFDROP_EXISTING = OFFONLINE = OFFALLOW_ROW_LOCKS  = ONALLOW_PAGE_LOCKS  = ONDATA_COMPRESSION = PAGE) ON [Sch_Group_QunNum]([QunNum]) 
  9. GO 

9、到此一切优化操作结束。查查数据库占用空间:

  1. Use [QunInfo]  
  2. EXEC sp_spaceused [QunList]   
  3. Use [GroupData]  
  4. EXEC sp_spaceused [GroupData]   

结果如下:

哎哟,爆炸了,QunInfo只占用了4.5G,优化之前占用8.5G。

GroupData原来的mdf文件大概有83GB,优化压缩之后mdf文件只占34GB。

两个库所有空间加起来大概65GB左右。

再看看每个分区的数据:

  1. SELECT  
  2.     partition = $PARTITION.Fun_QunList_QunNum([QunNum]) 
  3.     ,rows      = COUNT(*) 
  4.     ,min    = MIN([QunNum]) 
  5.     ,max    = MAX([QunNum]) 
  6. FROM [dbo].[QunList] 
  7. GROUP BY $PARTITION.Fun_QunList_QunNum([QunNum]) 
  8. ORDER BY PARTITION 

10、新建一个存储过程便于查询使用:

  1. USE [master] 
  2. GO 
  3. SET ANSI_NULLS ON 
  4. GO 
  5. SET QUOTED_IDENTIFIER ON 
  6. GO 
  7. CREATE PROCEDURE [dbo].[Qun]     
  8.    (     
  9.        @QunNum int 
  10.      )     
  11.     AS     
  12. SELECT  a.[QunNum] 
  13.       ,[QQNum] 
  14.       ,[Nick] 
  15.       ,[Age] 
  16.       ,(case when [Gender]=0 then '男' else '女' end) 性别 
  17.       ,(case when [Auth]=1 then '成员' when [Auth]=4 then '群主' when [Auth]=2 then '管理' end) 身份 
  18.       ,[MastQQ] 
  19.       ,[CreateDate] 
  20.       ,[Title] 
  21.       ,[Class] 
  22.       ,[QunText] 
  23.   FROM [GroupData].[dbo].[Group] a 
  24.   left join [QunInfo].[dbo].[QunList] b 
  25.   on a.[QunNum]=b.QunNum 
  26.   where  a.[QunNum]=@QunNum order by [Auth] desc 
  27. GO 
  28.  
  29. use QunInfo 
  30. GO 
  31. SET ANSI_NULLS ON 
  32. GO 
  33. SET QUOTED_IDENTIFIER ON 
  34. GO 
  35. CREATE PROCEDURE [dbo].[Qun]     
  36.    (     
  37.        @QunNum int 
  38.      )     
  39.     AS     
  40. SELECT  a.[QunNum] 
  41.       ,[QQNum] 
  42.       ,[Nick] 
  43.       ,[Age] 
  44.       ,(case when [Gender]=0 then '男' else '女' end) 性别 
  45.       ,(case when [Auth]=1 then '成员' when [Auth]=4 then '群主' when [Auth]=2 then '管理' end) 身份 
  46.       ,[MastQQ] 
  47.       ,[CreateDate] 
  48.       ,[Title] 
  49.       ,[Class] 
  50.       ,[QunText] 
  51.   FROM [GroupData].[dbo].[Group] a 
  52.   left join [QunInfo].[dbo].[QunList] b 
  53.   on a.[QunNum]=b.QunNum 
  54.   where  a.[QunNum]=@QunNum order by [Auth] desc 
  55. GO 
  56.  
  57. use GroupData 
  58. GO 
  59. SET ANSI_NULLS ON 
  60. GO 
  61. SET QUOTED_IDENTIFIER ON 
  62. GO 
  63. CREATE PROCEDURE [dbo].[Qun]     
  64.    (     
  65.        @QunNum int 
  66.      )     
  67.     AS     
  68. SELECT  a.[QunNum] 
  69.       ,[QQNum] 
  70.       ,[Nick] 
  71.       ,[Age] 
  72.       ,(case when [Gender]=0 then '男' else '女' end) 性别 
  73.       ,(case when [Auth]=1 then '成员' when [Auth]=4 then '群主' when [Auth]=2 then '管理' end) 身份 
  74.       ,[MastQQ] 
  75.       ,[CreateDate] 
  76.       ,[Title] 
  77.       ,[Class] 
  78.       ,[QunText] 
  79.   FROM [GroupData].[dbo].[Group] a 
  80.   left join [QunInfo].[dbo].[QunList] b 
  81.   on a.[QunNum]=b.QunNum 
  82.   where  a.[QunNum]=@QunNum order by [Auth] desc 
  83. GO 
  84. USE [master] 
  85. GO 
  86. SET ANSI_NULLS ON 
  87. GO 
  88. SET QUOTED_IDENTIFIER ON 
  89. GO 
  90. CREATE PROCEDURE [dbo].[QQ]     
  91.    (     
  92.        @QQNum int 
  93.      )     
  94.     AS     
  95. SELECT  a.[QunNum] 群号码 
  96.       ,[Title] 群名 
  97.       ,[QQNum] QQ号码 
  98.       ,[Nick] 昵称 
  99.       ,[Age] 
  100.       ,(case when [Gender]=0 then '男' else '女' end) 性别 
  101.       ,(case when [Auth]=1 then '成员' when [Auth]=4 then '群主' when [Auth]=2 then '管理' end) 身份 
  102.       ,[MastQQ] 
  103.       ,[CreateDate] 
  104.       ,[QunText] 
  105.   FROM [GroupData].[dbo].[Group] a 
  106.   left join [QunInfo].[dbo].[QunList] b 
  107.   on a.[QunNum]=b.QunNum 
  108.   where  [QQNum]=@QQNum order by CreateDate 
  109. GO 
  110. USE [QunInfo] 
  111. GO 
  112. SET ANSI_NULLS ON 
  113. GO 
  114. SET QUOTED_IDENTIFIER ON 
  115. GO 
  116. CREATE PROCEDURE [dbo].[QQ]     
  117.    (     
  118.        @QQNum int 
  119.      )     
  120.     AS     
  121. SELECT  a.[QunNum] 群号码 
  122.       ,[Title] 群名 
  123.       ,[QQNum] QQ号码 
  124.       ,[Nick] 昵称 
  125.       ,[Age] 
  126.       ,(case when [Gender]=0 then '男' else '女' end) 性别 
  127.       ,(case when [Auth]=1 then '成员' when [Auth]=4 then '群主' when [Auth]=2 then '管理' end) 身份 
  128.       ,[MastQQ] 
  129.       ,[CreateDate] 
  130.       ,[QunText] 
  131.   FROM [GroupData].[dbo].[Group] a 
  132.   left join [QunInfo].[dbo].[QunList] b 
  133.   on a.[QunNum]=b.QunNum 
  134.   where  [QQNum]=@QQNum order by CreateDate 
  135. GO 
  136. USE GroupData 
  137. GO 
  138. SET ANSI_NULLS ON 
  139. GO 
  140. SET QUOTED_IDENTIFIER ON 
  141. GO 
  142. CREATE PROCEDURE [dbo].[QQ]     
  143.    (     
  144.        @QQNum int 
  145.      )     
  146.     AS     
  147. SELECT  a.[QunNum] 群号码 
  148.       ,[Title] 群名 
  149.       ,[QQNum] QQ号码 
  150.       ,[Nick] 昵称 
  151.       ,[Age] 
  152.       ,(case when [Gender]=0 then '男' else '女' end) 性别 
  153.       ,(case when [Auth]=1 then '成员' when [Auth]=4 then '群主' when [Auth]=2 then '管理' end) 身份 
  154.       ,[MastQQ] 
  155.       ,[CreateDate] 
  156.       ,[QunText] 
  157.   FROM [GroupData].[dbo].[Group] a 
  158.   left join [QunInfo].[dbo].[QunList] b 
  159.   on a.[QunNum]=b.QunNum 
  160.   where  [QQNum]=@QQNum order by CreateDate 
  161. GO 

以后,查询一个群的资料跑这条脚本就行了:

  1. exec Qun [群号码] 
  2.  
  3. --查询一个QQ好的脚本: 
  4.  
  5. exec QQ [QQ号码] 

 

 

结果都是描出的。
接下来可以右键删除这22个库了:QunInfo01~11、GroupData01~11,只留下QunInfo库和GroupData库。