MS SQL 日常维护管理常用脚本(二)

时间:2021-09-22 21:39:58

MS SQL 日常维护管理常用脚本(二)

监控数据库运行

下面是整理、收集监控数据库运行的一些常用脚本,也是MS SQL 日常维护管理常用脚本(一)的续集,欢迎大家补充、提意见。

 

查看数据库登录名信息
 
Code Snippet
  1. SELECT name                                AS LoginName ,
  2.        dbname                              AS DefaultDB ,
  3.        createdate                          AS CreateDate,
  4.        updatedate                          AS UpdateDate,
  5.        language                            AS Language  ,
  6.        CASE WHEN isntname = 1 THEN 'NT USER'
  7.            ELSE 'SQL USER'    END          AS UserType
  8. FROM syslogins;

 

查看数据库用户信息
 
SELECT * FROM sysusers;
 
查看用户拥有的服务器角色
 

方法1: 用SSMS管理工具查看


方法2: 脚本查询

 
查看用户角色
  1. SELECT name            ,
  2.        CASE WHEN sysadmin     = 1       THEN 'yes'     ELSE '' END AS IsSysadmin        ,
  3.        CASE WHEN dbcreator    = 1       THEN 'yes'     ELSE '' END AS IsDbCreate        ,
  4.        CASE WHEN securityadmin= 1       THEN 'yes'     ELSE '' END AS IsSecurityadmin   ,
  5.        CASE WHEN bulkadmin    = 1       THEN 'yes'     ELSE '' END AS IsBulkadmin       ,
  6.        CASE WHEN diskadmin    = 1       THEN 'yes'     ELSE '' END AS IsDiskadmin       ,
  7.        CASE WHEN processadmin = 1       THEN 'yes'     ELSE '' END AS IsProcessadmin    ,
  8.        CASE WHEN serveradmin  = 1       THEN 'yes'     ELSE '' END AS IsServeradmin     ,
  9.        CASE WHEN setupadmin   = 1       THEN 'yes'     ELSE '' END AS IsSetupadmin    
  10. FROM syslogins
  11. --WHERE NAME='loginname'
 
查看最大工作线程数
 
Code Snippet
  1. SELECT  max_workers_count
  2.   FROM  sys.dm_os_sys_info

 

查看当前用户进程的会话ID

 

SELECT @@SPID

 

查询当前会话使用哪种协议

Code Snippet
  1. SELECT net_transport
  2. FROM   sys.dm_exec_connections
  3. WHERE session_id = @@SPID;
 
查看当前连接的会话信息

--进程号1--50是SQL Server系统内部用的
SELECT * FROM sys.dm_exec_sessions WHERE session_id >=51
 
--查看某台机器的连接会话信息
SELECT * FROM sys.dm_exec_sessions WHERE session_id >=51 AND host_name='PO130018801'
 
--查看某个登录名的连接会话信息
SELECT * FROM sys.dm_exec_sessions WHERE session_id >=51 AND login_name='username'
 
--查看活动的连接会话信息
SELECT * FROM sys.dm_exec_sessions WITH(NOWAIT) WHERE session_id >=51 AND status ='running'
 
--查找连接到服务器的用户并返回每个用户的会话数
SELECT  login_name ,
        COUNT(session_id) AS session_count
FROM    sys.dm_exec_sessions
GROUP BY login_name ;
 
 
查看正在执行的SQL语句
 

方法1: 选择数据库实例,单击右键,选择”活动监视器“,监控/查看正在执行的SQL


方法2: profile去跟踪,比较耗费资源。

 

方法3:

 
Code Snippet
  1. SELECT[Spid] = session_Id ,
  2.       ecid ,
  3.       [Database] = DB_NAME(sp.dbid) ,
  4.       [User] = nt_username ,
  5.       [Status] = er.status ,
  6.       [Wait] = wait_type ,
  7.       [Individual Query] = SUBSTRING(qt.text, er.statement_start_offset / 2,
  8.                                      ( CASE WHEN er.statement_end_offset = -1
  9.                                             THEN LEN(CONVERT(NVARCHAR(MAX), qt.text))
  10.                                                  * 2
  11.                                             ELSE er.statement_end_offset
  12.                                        END - er.statement_start_offset ) / 2) ,
  13.       [Parent Query] = qt.text ,
  14.       Program = program_name ,
  15.       Hostname ,
  16.       nt_domain ,
  17.       start_time
  18.   FROMsys.dm_exec_requests er
  19.       INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
  20.       CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
  21.  WHEREsession_Id >= 51

方法4:

Code Snippet
  1. SELECT   m.session_id ,
  2.          m.start_time ,
  3.          m.command    ,
  4.          m.wait_type  ,
  5.          m.cpu_time   ,
  6.         CAST(s.text AS VARCHAR(1000)) AS sqlText
  7.  FROMmaster.sys.dm_exec_requests m WITH ( NOLOCK )
  8.      CROSS APPLY fn_get_sql(m.sql_handle) s
  9.  
  10. SELECT  r.session_id,
  11.         r.start_time      ,
  12.         r.command         ,
  13.         r.wait_type       ,
  14.         r.cpu_time        ,
  15.         s.text  
  16.  FROMsys.dm_exec_requests r
  17.      CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s

--查看某个会话ID正在执行的SQL

Code Snippet
  1. SELECT  m.session_id ,
  2.         m.start_time ,
  3.         m.command    ,
  4.         m.wait_type  ,
  5.         m.cpu_time   ,
  6.       CAST(s.text AS VARCHAR(1000)) AS sqlText
  7.   FROMmaster.sys.dm_exec_requests m WITH ( NOLOCK )
  8.       CROSS APPLY fn_get_sql(m.sql_handle) s
  9.  WHEREm.session_id = 342
  10.  
  11.     SELECT   r.session_id      ,
  12.              r.start_time      ,
  13.              r.command         ,
  14.              r.wait_type       ,
  15.              r.cpu_time        ,
  16.              s.text  
  17.   FROM sys.dm_exec_requests r
  18.       CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s
  19. WHERE r.seesion_id =342

查看SQL SERVER进程执行的语句

Code Snippet
  1. USE master
  2.  
  3. DECLARE @spid INT ;
  4.  
  5. DECLARE @sql_handle BINARY(20) ;
  6.  
  7. SET @spid = 56
  8.  
  9.   SELECT@sql_handle = sql_handle
  10.     FROMsysprocesses AS A WITH ( NOLOCK )
  11.    WHEREspid = @spid ;
  12.  
  13.   SELECTtext
  14.     FROM::fn_get_sql(@sql_handle) ;
 
查找TOP N语句

按平均 CPU 时间返回排名前十个的查询的相关信息。此示例将根据查询的查询哈希对查询进行聚合,以便按照查询的累积资源消耗来分组在逻辑上等效的查询。
--注意:SQL 2005 某些版本,没有sys.dm_exec_query_stats系统动态视图没有query_hash视图。

Code Snippet
  1. USE DBNAME;
  2. GO
  3. SELECT TOP 10 query_stats.query_hash             AS "Query Hash",
  4.     SUM(query_stats.total_worker_time) /
  5.     SUM(query_stats.execution_count)             AS "Avg CPU Time",
  6.     MIN(query_stats.statement_text)              AS "Statement Text"
  7. FROM
  8.     (SELECT QS.*,
  9.     SUBSTRING(ST.text,(QS.statement_start_offset/2) + 1,
  10.     ((CASE statement_end_offset
  11.         WHEN -THEN DATALENGTH(st.text)
  12.         ELSE QS.statement_end_offset END
  13.             - QS.statement_start_offset)/2) + 1) AS statement_text
  14.      FROM sys.dm_exec_query_stats AS QS
  15.      CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
  16. GROUP BY query_stats.query_hash
  17. ORDER BY 2 DESC;
  18. GO
查看会话阻塞/死锁信息
 

方法1:查看那个引起阻塞,查看blk不为0的记录,如果存在阻塞进程,则是该阻塞进程的会话 ID。否则该列为零。 

    EXEC sp_who active

方法2:查看那个引起阻塞,查看字段BlkBy,这个能够得到比sp_who更多的信息。

    EXEC sp_who2 active

方法3:sp_lock 系统存储过程,报告有关锁的信息,但是不方便定位问题


方法4:sp_who_lock存储过程

Code Snippet
  1. USE master;
  2. GO
  3.  
  4. SET ANSI_NULLS ON;
  5. GO
  6.  
  7. SET QUOTED_IDENTIFIER ON;
  8. GO
  9.  
  10. IF EXISTS(SELECT 1 FROM sysobjects WHERE id=OBJECT_ID(N'sp_who_lock')
  11.                                        AND OBJECTPROPERTY(id, 'IsProcedure') =1)
  12.     DROP PROCEDURE sp_who_lock;
  13. GO
  14.  
  15. --==================================================================================================
  16. --            ProcedureName             :            sp_who_lock
  17. --            Author                    :            作者不详,出自网络
  18. --            CreateDate                :            2013-05-13
  19. --            Description               :            查看阻塞和死锁信息
  20. /**************************************************************************************************
  21.         Parameters                    :              参数说明
  22. ***************************************************************************************************
  23.                                                      无参存储过程
  24. ***************************************************************************************************
  25.         Modified Date            Modified User     Version                 Modified Reason
  26. ***************************************************************************************************
  27.        2013-06-03                    Kerry        V01.00.01 调整存储过程格式,代码部分修改以及增加注释信息
  28. ***************************************************************************************************/
  29. --=================================================================================================
  30.  
  31.   CREATE PROCEDURE sp_who_lock
  32.     AS
  33. BEGIN
  34.  
  35. DECLARE @spid                            INT;
  36. DECLARE @block                           INT;
  37. DECLARE @RowCount                        INT;
  38. DECLARE @RowIndex                        INT;
  39.  
  40. --创建临时表,保持被阻塞或正阻塞其他SQL的SQL语句信息
  41. CREATE TABLE #tmp_lock_who
  42. (
  43.       id    INT IDENTITY(1, 1) ,
  44.       spid    SMALLINT ,
  45.       block SMALLINT
  46. )
  47.     
  48.     
  49. IF @@ERROR<>RETURN @@ERROR;
  50.  
  51. INSERT INTO #tmp_lock_who
  52.         (
  53.           spid ,
  54.           block
  55.         )
  56.         SELECT  0 ,
  57.                 blocked
  58.         FROM    ( SELECT    *
  59.                   FROM      sysprocesses
  60.                   WHERE     blocked > 0
  61.                 ) a
  62.         WHERE   NOT EXISTS( SELECT *
  63.                              FROM   ( SELECT    *
  64.                                       FROM      sysprocesses
  65.                                       WHERE     blocked > 0
  66.                                     ) b
  67.                              WHERE  a.blocked = spid )
  68.         UNION
  69.         SELECT  spid ,
  70.                 blocked
  71.         FROM    sysprocesses
  72.         WHERE   blocked > 0;
  73.         
  74.         
  75. IF @@ERROR<>RETURN @@ERROR;
  76.  
  77.  
  78. -- 找到临时表的记录数
  79.   SELECT@RowCount = COUNT(1) ,
  80.         @RowIndex = 1
  81.     FROM#tmp_lock_who
  82.  
  83.  
  84. IF @@ERROR<>RETURN @@ERROR;
  85.  
  86.   IF@RowCount=0
  87.   SELECT  N'现在没有阻塞和死锁信息' AS MESSAGE;
  88.  
  89.  
  90. -- -- 循环开始
  91. WHILE @RowIndex <= @RowCount
  92. BEGIN
  93.     -- 取第一条记录
  94.     SELECT     @spid    = spid,
  95.                @block   = block
  96.     FROM #tmp_lock_who
  97.     WHERE Id = @RowIndex
  98.  
  99.     IF @spid = 0
  100.         SELECT N'引起数据库死锁的是: ' + CAST(@block AS VARCHAR(10))
  101.             +  N'进程号,其执行的SQL语法如下';
  102.     ELSE
  103.         SELECT N'进程号SPID:' + CAST(@spid AS VARCHAR(10)) + N'被进程号SPID:'
  104.             +  CAST(@block AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下';
  105.         
  106.     DBCC INPUTBUFFER(@block )
  107.  
  108.  
  109.     SET @RowIndex = @RowIndex + 1;
  110.  
  111. END;
  112.  
  113.     DROP TABLE #tmp_lock_who;
  114.  
  115.     RETURN 0;
  116. END

方法5:右键服务器-选择“活动和监视器”,查看进程选项。注意“任务状态”字段。

方法6:右键服务名称-选择报表-标准报表-活动-所有正在阻塞的事务。


小结:总结之后,才发现居然有这么多方法,MGD,系统的整理、梳理知识点是非常有必要的,你能更全面、深入的了解。

 
查看内存状态

dbcc memorystatus


具体如何分析,请查看官方文档http://support.microsoft.com/kb/907877/zh-cn

 
查看脚本执行时间


方法1: 查看SSMS管理器,查询窗口右下角
方法2:

Code Snippet
  1. DECLARE @exectime DATETIME
  2.   SELECT@exectime = GETDATE()
  3. --SQL 语句
  4. PRINT N'SQL执行耗时:' + CONVERT(VARCHAR(10), DATEDIFF(ms, @exectime, GETDATE()))

方法3:

SET STATISTICS TIME ON

--SQL 语句

 

查看进程正在执行的SQL语句 

  dbcc inputbuffer ()

查看那些表缺少索引 

 

下面语句功能强大,执行结果受统计信息的影响

Code Snippet
  1. SELECT sys.objects.name table_name,
  2.        mid.statement full_name,
  3.     (migs.avg_total_user_cost * migs.avg_user_impact) *(migs.user_seeks + migs.user_scans) AS Impact,
  4.     migs.avg_user_impact *(migs.user_seeks + migs.user_scans) Avg_Estimated_Impact,
  5.     'CREATE NONCLUSTERED INDEX IDX_' + sys.objects.name + '_N ON '
  6.         + sys.objects.name COLLATE DATABASE_DEFAULT
  7.         + ' ( ' + IsNull(mid.equality_columns, '')
  8.         + CASE WHEN mid.inequality_columns IS NULL
  9.                 THEN ''
  10.             ELSE
  11.                 CASE WHEN mid.equality_columns IS NULL
  12.                     THEN ''
  13.                 ELSE ','
  14.                 END + mid.inequality_columns
  15.             END + ' ) '
  16.         + CASE WHEN mid.included_columns IS NULL
  17.                 THEN ''
  18.             ELSE 'INCLUDE (' + mid.included_columns + ')' END
  19.         + ';' AS CreateIndexStatement,
  20.     mid.equality_columns,
  21.     mid.inequality_columns,
  22.     mid.included_columns
  23. FROM sys.dm_db_missing_index_group_stats AS migs
  24.     INNER JOIN sys.dm_db_missing_index_groups AS mig ON migs.group_handle = mig.index_group_handle
  25.     INNER JOIN sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle
  26.         AND mid.database_id = DB_ID()
  27.     INNER JOIN sys.objects WITH (nolock) ON mid.OBJECT_ID = sys.objects.OBJECT_ID
  28. WHERE (migs.group_handle IN
  29.         (
  30.             SELECT TOP (500) group_handle
  31.             FROM sys.dm_db_missing_index_group_stats WITH (nolock)
  32.             ORDER BY (avg_total_user_cost * avg_user_impact) *(user_seeks + user_scans) DESC))
  33.     AND OBJECTPROPERTY(sys.objects.OBJECT_ID, 'isusertable')=1
  34. --ORDER BY [Impact] DESC, [full_name] DESC
  35. ORDER BY [table_name], [Impact] desc

查看应该被移除的索引

 

查看那些多余的、应该被移除的索引

SQL 1:

Code Snippet
  1. SELECT OBJECTNAME = OBJECT_NAME(I.OBJECT_ID),
  2.     INDEXNAME = I.NAME,
  3.     I.INDEX_ID
  4. FROM SYS.INDEXES I
  5.     JOIN SYS.OBJECTS O ON I.OBJECT_ID = O.OBJECT_ID
  6. WHERE OBJECTPROPERTY(O.OBJECT_ID,'IsUserTable') = 1
  7.     AND I.INDEX_ID NOT IN(
  8.                             SELECT S.INDEX_ID
  9.                             FROM SYS.DM_DB_INDEX_USAGE_STATS S
  10.                             WHERE S.OBJECT_ID = I.OBJECT_ID
  11.                                 AND I.INDEX_ID = S.INDEX_ID
  12.                                 AND DATABASE_ID = DB_ID())
  13. ORDER BY OBJECTNAME, I.INDEX_ID, INDEXNAME ASC

SQL 2: 分析下面语句,移除那些没有必要的索引

Code Snippet
  1. SELECT DB_NAME(database_id)         AS  N'DataBaseName'  ,
  2.        OBJECT_NAME(U.object_id)     AS  N'Table_Name'    ,
  3.        I.name                       AS  N'Index_Name'    ,
  4.        user_seeks                   AS  N'用户索引查找次数',
  5.        user_scans                   AS  N'用户索引扫描次数',
  6.        last_user_seek               AS  N'最后查找时间'   ,
  7.        last_user_scan               AS  N'最后扫描时间'   ,
  8.        rows                         AS  N'表中的行数'
  9. FROM sys.dm_db_index_usage_stats AS U
  10.    INNER JOIN sys.indexes I ON U.index_id= I.index_idAND U.object_id= I.object_id
  11.   INNER JOIN sysindexesT ON I.object_id = T.id
  12. WHERE database_id= DB_ID('DbName')
  13. AND OBJECT_NAME(U.object_id)='TableName'
  14. ORDER BY user_seeks, user_scans, object_name(U.object_id);
作者: 潇湘隐者

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

随笔分类 -数据库技术(MS SQL)

MS SQL 日常维护管理常用脚本(二)

2013-06-24 20:57 by 潇湘隐者, 1825 visits, 网摘收藏编辑
摘要:监控数据库运行下面是整理、收集监控数据库运行的一些常用脚本,也是MS SQL 日常维护管理常用脚本(一)的续集,欢迎大家补充、提意见。查看数据库登录名信息Code SnippetSELECT name AS LoginName ,dbnameAS DefaultDB ,createdateAS CreateDate,updatedateAS UpdateDate,languageAS Language,CASE WHEN isntname = 1 THEN 'NT USER'ELSE 'SQL USER'ENDAS UserTypeFROM syslogins;  阅读全文

迁移Reporting Services的方法与WMI错误

2013-06-18 22:22 by 潇湘隐者, 91 visits, 网摘收藏编辑
摘要:今天上午,接到一个任务:迁移SQL SERVER 2005的报表服务到另外一台SQL SERVER 2008服务器,结果等我备份了两边服务器的ReportServer,ReportServerTempDB以及相关准备工作后,准备用Reporting Services 配置管理器(Reporting Services Configuration Manage)备份RS秘钥时,结果悲剧的一幕出现了。WMI错误,具体错误细节请见下面See the end of this message for details on invokingjust-in-time (JIT) debugging inst.  阅读全文

MS SQL 日常维护管理常用脚本(一)

2013-06-15 00:03 by 潇湘隐者, 1261 visits, 网摘收藏编辑
摘要:SQL SERVER 数据库日常维护,管理,巡检过程中你可能经常需要用到一些SQL语句(亦或方法)来查看数据库服务器环境(操作系统版本, 磁盘空间,CPU,RAM信息),数据库信息(数据库版本,实例名称...),数据库对象等。查看数据库信息查看数据库服务器名称 方法1:SQL脚本查询,可以通过下面脚本来查询。 默认实例默认实例查询SELECT @@SERVERNAME AS SERVERNAME;SELECT SERVERPROPERTY('servername') AS ServerName;SELECT srvname AS ServerName FROM sys.syss  阅读全文

MS SQL 数据库状态为SUSPECT的处理方法

2013-06-10 22:57 by 潇湘隐者, 85 visits, 网摘收藏编辑
摘要:当SQL SERVER数据库状态为质疑(SUSPECT)状态时,我们可以用以下方法来处理:1. 修改数据库为紧急模式:ALTER DATABASE DBName SET EMERGENCY .2. 检查数据库的完整性:DBCC CHECKDB(‘DBName’)3. 检查没有错误则恢复数据库为正常模式:ALTER DATABASE DBName SET ONLINE;4 如检查数据库有错误则修改数据库为单用户模式,依情况选择以下命令行进行修复数据;Code SnippetDBCC CHECKDB('DBName',REPAIR_FAST);DBCC CHECKDB('D  阅读全文

MS SQL 完全卸载数据库

2013-06-10 20:24 by 潇湘隐者, 94 visits, 网摘收藏编辑
摘要:卸载SQL SERVER 数据库可能很多人都做过,但是我们需要注意,有时候可能没有完全卸载干净。当然SQL SERVER不像ORACLE数据库,卸载不干净也完全可以重新安装,可能会出现安装不成功的情况,那么如何完全卸载数据库呢?下面的操作环境以WIN2008 + SQL SERVER 2008 R2为例来实验一下:步骤1: 关闭SQL SERVER的所有服务。步骤2: 若要开始卸载过程,请从“开始”菜单单击“控制面板”,然后双击“程序和功能”。选择要卸载的 SQL Server 组件,然后单击“卸载”。步骤3: 此时将启动 SQL Server 安装向导,点击Remove按钮,即可开始卸载SQ  阅读全文

[翻译]为什么你不要收缩数据库文件

2013-06-04 00:43 by 潇湘隐者, 1612 visits, 网摘收藏编辑
摘要:前言,这几天查看了很多关于SQL SERVER收缩数据文件方面的文章,准备写一篇关于收缩日志方面的文章,但是突然有种冲动将看过经典的文章翻译出来,下面这篇文章是翻译的是Paul Randal – “Why You Should Not Shrink Your Data Files”。有些比较难以翻译、清晰的地方,我会贴上原文。好了,不啰嗦了,直接看下面的翻译吧。 我最大的一个热点问题是关于收缩数据文件,虽然在微软的时候,我自己写了相关收缩数据文件代码,我再也没有机会去重写它,让它操作起来更方便。我真的不喜欢收缩。 现在,不要混淆了收缩事务日志文件和收缩数据文件,当事务日志文件的增长失控或为了.  阅读全文

MS SQL 日志记录管理

2013-05-28 18:54 by 潇湘隐者, 864 visits, 网摘收藏编辑
摘要:MS SQL的日志信息/日志记录,可能对你来说,既熟悉又陌生,熟悉是因为你可能一直都在使用,查看、关注一些日志信息/记录,例如,作业历史记录;陌生是因为你可能从不关注日志信息/记录的管理,这里我一直用日志信息/记录这个词,而没有用日志文件这个词来阐述,是想让大家把它和事务日志文件(ldf)区分开来,网上你用日志文件做搜索关键词,可能搜出来的都是事务日志相关的信息。其实它真的也叫日志文件,这篇文章我大概从日志记录分类、如何查看日志记录、日志记录的位置、日志记录的设置、为什么错误日志会暴增、如何清除日志记录等方面来讲述。日志记录分类按日志文件查看器,习惯将错误日志归为SQL SERVER、 SQ.  阅读全文

MS SQL 事物日志传送能否跨数据库版本吗?

2013-05-22 12:13 by 潇湘隐者, 468 visits, 网摘收藏编辑
摘要:SQL SERVER的事物日志传送(log shipping)功能,相信很多人都使用过或正在应用,这是MS SQL提供的一个非常强大的功能,一般需要一个主数据库服务器(primary/production database server)和辅助数据库服务器(standby server)来完成这个配置,默认情况下,主数据库和辅助数据库的版本应该是一致的,那么如果这两个数据库版本不一致,会不会有什么问题?还能做log shipping配置吗?那么数据库版本不一致分两种情况: 1: 类似于MS SQL 2005 64 bit SP4 与MS SQL 2005 SP3 32 bit这样的版本差别 .  阅读全文

MS SQL 模仿ORACLE的DESC

2013-05-21 23:15 by 潇湘隐者, 301 visits, 网摘收藏编辑
摘要:前言: 在ORACLE数据库的SQL*PLUS里面有个DES(DESCRIBE)命令,它可以返回数据库所存储对象的描述,如下所示 SQL> DESC STUDENT_SCORE Name Type Nullable Default Comments ---------------- -------...  阅读全文

SSMS 2005 连接 SQL SERVER 2008问题

2013-05-21 11:28 by 潇湘隐者, 85 visits, 网摘收藏编辑
摘要:用本机的 Microsoft SQL Server Management Studio 2005 客户端连接数据库服务器时报错:“This version of Microsoft SQL Server Management Studio can only be used to connect to SQL Server 2000 and SQL Server 2005 servers. (ConnectionDlg)”,截图如下:具体环境:本机安装的是Microsoft SQL Server Management Studio 2005 客户端工具, 具体版本号为9.00.1399.00,服  阅读全文

MS SQL 管理监控系列

2013-05-19 19:50 by 潇湘隐者, 184 visits, 网摘收藏编辑
摘要:MS SQL管理监控系列主要是做一个目录,收集、整理现在和以后MS SQL 管理监控系列方面的文章,方便自己和大家查阅。也希望激励自己不断学习前进! MS SQL 监控数据库的DDL操作 MS SQL 监控磁盘空间告警 MS SQL 监控数据/日志文件增长  阅读全文

MS SQL 批量给存储过程/函数授权

2013-05-14 23:38 by 潇湘隐者, 899 visits, 网摘收藏编辑
摘要:在工作当中遇到一个类似这样的问题:要对数据库账户的权限进行清理、设置,其中有一个用户Test,只能拥有数据库MyAssistant的DML(更新、插入、删除等)操作权限,另外拥有执行数据库存储过程、函数的权限,但是不能进行DDL操作(包括新建、修改表、存储过程等...),于是需要设置登录名Test的相关权限:1:右键单击登录名Test的属性.2: 在服务器角色里面选择"public"服务器角色。3:在用户映射选项当中,选择"db_datareader"、"db_datawriter"、"public"三个数据库角色  阅读全文

MS SQL 监控数据/日志文件增长

2013-05-12 22:08 by 潇湘隐者, 711 visits, 网摘收藏编辑
摘要:前几天,在所有数据库服务器部署了监控磁盘空间的存储过程和作业后(MS SQL 监控磁盘空间告警),今天突然收到了两封告警邮件,好吧,存储规划是一方面,但是,是不是要分析一下是什么原因造成磁盘空间不足的呢?会不会是因为突然暴增的日志文件,抑或是系统业务猛增导致数据量暴增,还是历史数据累计原因....分析总得有数据来支撑吧,但是现在只有那些数据文件的当前大小信息,没有数据文件的历史增长变化信息,所以,今天就想实现这么一个功能,每天(频率可以调整)去收集一下数据文件的信息,放到一个表里面,这样方便我们分析数据文件的增长演变例程,甚至你可以将数据文件的增长幅度和业务变化关联起来分析....那么接下来.  阅读全文

SQL 2005/2008 连接SQL 2000报18456错误

2013-05-09 11:17 by 潇湘隐者, 10 visits, 网摘收藏编辑
摘要:在看文章前,你先看看下面这两个问题,考考你对MSSMS工具的掌握情况:1: SQL 2005/2008 能连接 SQL 2000数据库服务器吗?2: SQL 2000 能连接SQL 2005/2008数据库服务器吗?答案是都可以。实验环境:本机Windows 7 专业版,安装有SQL 2005客户端和 SQL 2008客户端工具,采用Windows 身份认证方式连接公司一台数据库服务器(SQL 操作系统:Windows 2000 服务器,数据库版本:SQL2000 STD),报如下错误,原因是:折腾了许久,参考了网上很多资料,结果最后悲剧性发现这个错误,不是网上所说的原因引起的,而是由于use  阅读全文

MS SQL 监控磁盘空间告警

2013-05-07 23:01 by 潇湘隐者, 1119 visits, 网摘收藏编辑
摘要:这几天突然有个想法:希望能够自动监控、收集数据库服务器的磁盘容量信息,当达到一个阀值后,自动发送告警邮件给DBA,将数据库磁盘详细信息告知DBA,提醒DBA做好存储规划计划,初步的想法是通过作业调用存储过程来实现(每天调用一次),这样避免了我每天每台数据库服务器都上去检查一下,尤其是手头的数据库服务器N多的情况,这样可以避免我每天浪费无谓的时间。如果大家有更好的建议和方法,欢迎指点...  阅读全文

YourSQLDba介绍

2013-05-02 23:22 by 潇湘隐者, 972 visits, 网摘收藏编辑
摘要:YourSQLDba介绍YourSQLDba是一个法国人写的程序,它是由一系列T-SQL存储过程构成的脚本文件。可以理解成一个组件或安装包,从而简化了在Mircorsoft SQL Server 2005/2008 数据库的安装,部署。它可以提供自动、复杂,非常容易定制的数据库维护管理,从而可以极大的让DBA从繁杂的维护工作中释放出来。这是一个优秀的工具,可以减轻你的工作。也是每个DBA应该努力的方向,可以编写自己的数据库管理维护工具,让你从繁杂的工作中解脱出来。YourSQLDba的官方网站:http://www.grics.qc.ca/yoursqldba/index_en.shtml主要  阅读全文

MS SQL 能否修改实例名称

2013-04-28 18:56 by 潇湘隐者, 113 visits, 网摘收藏编辑
摘要:前几天研究了了一下修改数据库名称的方式后,今天突然冒出一个问题,MS SQL的命名实例是否也可以修改呢?例如下图,我在本机上安装了一个命名实例GSP,如果我想将其改为GSPS,能行吗? 如果可以,那么该怎么做呢?该如何下手呢,真的不知道怎么做,毕竟以前都没有做过修改命令实例(当然修改计算机名称是另外一回事),先从网上搜索资料吧,结果,搜索到一堆不相关的资料,其实都不是真正的修改命名实例名称,只是修改计算机名称。不过最后搜索到一点有用的信息http://www.itpub.net/thread-1047040-1-1.html, 不过呢,我按照其操作去实现的时候,发现根本行不通。修改sysser  阅读全文

MS SQL监控数据库的DDL操作

2013-04-27 23:35 by 潇湘隐者, 1193 visits, 网摘收藏编辑
摘要:前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理起来就会相当麻烦,容易产生混乱,如果数据库管理员不监控数据库架构变更的话,就不知道谁对数据库架构做了啥改动(此处改动仅仅只DDL操作),尤其有时候,有些开发人员可能不按规章制度办事,绕过或忘了通知发布人员或DBA,直接去生产机做一些DDL操作,那么我们就需要对数据库架构某些更改的事件进行监控,如果能够监控并留下证据,这样既可以让DBA或相关管理人员知晓这些变更,有效管理数据库,也可以避免出现问题,.  阅读全文

MS SQL修改数据库名称

2013-04-25 23:13 by 潇湘隐者, 112 visits, 网摘收藏编辑
摘要:在MS SQL中,如果你想修改某一个数据库的名称,你可以通过下面几种方法实现。 方法一:使用SP_RENAMEDB系统存储过程实现。 语法: sp_renamedb [ @dbname = ] 'old_name' , [ @newname = ] 'new_name' 例子: 我需要将数据库Test_1的名称修改为Test use mastergoexec sp_rename...  阅读全文

MS SQL 迁移数据库文件

2013-04-24 22:56 by 潇湘隐者, 144 visits, 网摘收藏编辑
摘要:MS SQL 数据库迁移文件,这里说的不是将数据库迁移到另外一台服务器,只是在服务器不同磁盘目录内做迁移。移动数据库文件的情况大致有下面一些: 1: 事先没有规划好,数据库文件或日志文件增长过快,导致某个盘或整个磁盘空间不足,需要移动数据文件或日志文件 2: 纯粹由于业务需求,数据增长过快。 3: 为了更好的IO的性能,需要将数据文件、日志文件分布到不同磁盘,减轻IO压力,提供IO性能。 4:故障恢复。例如,数据库处于可疑模式或因硬件故障而关闭。案例:现在我在数据库实例中有数据库MyAssistant,(假设)由于事先没有规划好,导致数据文件位于E:\DataBase目录下, 我们需要...  阅读全文

MS SQL数据库服务介绍

2013-04-21 20:14 by 潇湘隐者, 136 visits, 网摘收藏编辑
摘要:服务类型服务是一种在系统后台运行的应用程序。服务通常提供一些核心操作系统功能,MS SQL有下面一些服务。服务类型服务描述SQL Server提供数据的存储、处理和受控访问,并提供快速的事务处理Analysis Server为商业智能应用程序提供联机分析处理(OLAP)和数据挖掘功能。SQL Browser将 SQL Server 连接信息提供给客户端计算机FullText Search 快速创建结构化和半结构化数据的内容和属性ReportServer管理、执行、呈现、计划和传递报表。SQL Agent执行作业、监视 SQL Server、激发警报,以及允许自动执行某些管理任务。SSIS Se  阅读全文

MS SQL 挑战问题

2013-03-28 10:56 by 潇湘隐者, 1641 visits, 网摘收藏编辑
摘要:群里面有位网友提出了这样一个SQL挑战问题(原话不是这样,为了说明问题,我略做调整些): 问题说明如下 有一条个销售报表TEST : 商品 金额 A 1400 B 800 C 790 ... ... 现在有这样一个需求(要写一个SQL取出如下数据):先按销售金额倒叙排序,然后从这个报表取出前N条记录,并且这N条记录的销售金额之和是总金额的80%(<= 80%), 80%将作为...  阅读全文

SQL SERVER 表最小行的一个纠结问题

2011-05-19 00:37 by 潇湘隐者, 1475 visits, 网摘收藏编辑
摘要:昨天一个同事突然问我,说他在SQL 2000数据库创建如下表的时候,突然碰到了下面一条警告信息。SQL脚本和警告信息如下:IFOBJECT_ID(N'Log')ISNULLBEGINCREATETABLELog([Date]DATETIME,[Thread]NVARCHAR(255),[Level]NVARCHAR(50),[Logger]NVARCHAR(255),[Message]NVARCHAR(4000),[Exception]NVARCHAR(4000))ENDELSEPRINT('该表已经存在,请检查数据库');GOWarning:Thetable&  阅读全文

三大数据库对比研究系列——数据类型

2011-04-20 22:10 by 潇湘隐者, 308 visits, 网摘收藏编辑
摘要:如果你经常在不同类型数据库做开发或学习时,切换数据库写脚本时,不同数据库的数据类型可能会让你有点“晕”。下面我将对Oracle、SQL Server 、MySql三种数据库的数据类型做下例举、比较SQL SERVER数据库暂且以SQL Server 2005为参考SQL SERVER 数据类型分的比较细: 整数数据、 字符数据、 货币数据、日期和时间数据、二进制字符串等 数据类型 所属类型 所占字节 范围 tinyint 精确数字类型 1字节 0 ~ 255 smallint 精确数字类型 2字节 -215(-32768)~215-1(32767) int 精确数字类型 4字节 -231 (-  阅读全文

SQL 2000自定义函数调用GETDATE()报错

2011-03-23 22:38 by 潇湘隐者, 220 visits, 网摘收藏编辑
摘要:在SQL 2000数据库里的自定义函数中调用GETDATE()时,结果编译时报错,提示错误如下:Invalid use of 'getdate' within a function我给个测试例子如下所示,--================================================================================================-- Author : Kerry-- CreateDate : 2011-03-23-- Description : ...  阅读全文

Access数据库问题锦集

2011-03-13 19:07 by 潇湘隐者, 230 visits, 网摘收藏编辑
摘要:很少采用Access做数据库开发,前段时间,朋友接了一个小单,让我帮忙做后台开发,采用Access + Asp.Net开发,结果在开发过程使用Access碰到不少问题,所以把这些问题总结一下,希望对其它人有些帮助1: Access分页脚本问题使用Access作为数据库开发系统时,页面数据分页的方案有好几种: 1.1 使用DataGridView自带的分页功能. 1.2. 使用SELECTTOP NOT IN 来实现。类似如下所示:SELECT TOP 100 [ID] , [Message] , [CreateDate]FROM ScrollMessageWHERE ID NOT IN ( S  阅读全文

ROW_NUMBER () 与 PARTITION 组合妙用

2010-12-27 18:32 by 潇湘隐者, 263 visits, 网摘收藏编辑
摘要:前几天在一个群里面,有位网友问:在一个Book表里面里有字段AuthorID与Author表关联,现在要求按PublishDate字段倒序排列,列出每个作者的前五本书。要求有没有一条语句搞定的. 当时有个网友说不能一条语句解决问题,说只能用游标或临时表来解决。恰好我前阵子在整报表时遇到过类似的问题,当时解决过这个问题。当时我就告诉他用ROW_NUMBER与PARTITION来解决(前提是SQL SERVER 05或以上版本)。恰好现在有时间。正好把这个整理一下,即是对知识的梳理、巩固、总结,也希望能给其他人一些帮助建表脚本代码代码下面就是解决问题的脚本代码  阅读全文

SQL Server 复制需要有实际的服务器名称才能连接到服务器

2010-12-27 17:21 by 潇湘隐者, 323 visits, 网摘收藏编辑
摘要:机子由于在捣鼓DAC连接方式时,计算机名被修改了,被改成了kerry,直到最近几天由于计算机改名了,这个潜在的问题(本机数据库只是偶尔那里做实验)终于爆发了:我用连接服务器从其它服务器拷贝数据时报错,错误如下:SQL Server 复制需要有实际的服务器名称才能连接到服务器。不支持通过服务器别名、IP 地址或任何其他备用名称进行连接。请指定实际的服务器名称“xxxx”。 (Replication.Utilities):具体情况如图所示解决方法:从sys.sysservers 查看列 svrname 可以发现不是新的计算机名,问题就出在此处(如图所示)。先用 sp_dropserver 删除服务  阅读全文

T-SQL 编码标准【转帖】

2010-11-21 23:23 by 潇湘隐者, 249 visits, 网摘收藏编辑
摘要:本文转自:http://www.microsoft.com/china/msdn/library/data/sqlserver/sp04l9.mspx?mfr=true可能让人觉得很奇怪,但好像的确没有什么“正式的”T-SQL 编码标准。早在 1999 年末的时候,我惊喜地发现 John Hindmarsh 提出的 SQL Server 7.0 标准,我在 2000 年 2 月的社论中对他的某些建议进行了总结。(2000 年 2 月以及本月的“下载”中都包括了 John 原来的标准。)后来,Ron Talmage 撰写了一系列专栏文章,提出了他对各种“最佳方法”的建议,当然,SQL Serve  阅读全文

SQL SERVER 的模糊查询 LIKE

2010-10-14 17:00 by 潇湘隐者, 144 visits, 网摘收藏编辑
摘要:今天写个动态脚本,需要把数据库里面包含“USER_"的表删除掉,突然想不起来如何搜索通配字符了,赶紧查查MSDN,整理了下模糊查询的知识点,留着以后查阅用。LIKE模糊查询的通配符 通配符 说明 示例 % 包含零个或多个字符的任意字符串。 WHERE title LIKE '%computer%'将查找在书名中任意位置包含单词"computer"的所有书名。 _(下划线) 任何单个字...  阅读全文

慎用SELECT INTO复制表

2010-10-12 12:18 by 潇湘隐者, 598 visits, 网摘收藏编辑
摘要:很多时候我们习惯于用SELECT INTO复制一个表或表结构,因为它方便,快捷,而且在某些情况下效率比INSERT INTO 效率要高一些。但是要注意: SELECT INTO 复制表或表结构的时候,只是得到了一个“外壳”,就像克隆人一样,只是得到了一个躯体,个人的意识、回忆都不会克隆的。像原表的主键、外键、约束、触发器、索引都不会被复制过来。这点要注意哦,在某些情况下,没...  阅读全文

SQL Server 2008 打SP1 补丁遇到的问题

2010-09-21 17:05 by 潇湘隐者, 1573 visits, 网摘收藏编辑
摘要:今天在我机器上给SQL Server 2008 打上SP1补丁时,错误不断,郁闷死了。我的机器是XP Server Pack 3, SQL Server 2008 版本:SQL Server 2008 版本Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--...  阅读全文

SQL Server 2008 筛选器报错Microsoft.SqlServer.Management.Sdk.Sfc

2010-09-21 14:53 by 潇湘隐者, 339 visits, 网摘收藏编辑
摘要:在Microsoft SQL Server 数据库中有时候经常需要筛选表,因为数据中表比较多时,不仅从一堆表里面找一个表比较麻烦,而且客户端从服务器加载这些信息需要一些时间。前两天安装了SQL Server 2008,结果在筛选表时,报如下错误:点击确定后,然后“表(已筛选)”,弹出如下错误提示。这个是因为没有打上SQL Server 2008 Service Pack 1...  阅读全文

SQL Server数据库专用管理员DAC连接方式

2010-09-18 11:38 by 潇湘隐者, 320 visits, 网摘收藏编辑
摘要:SQL Server 提供了专用管理员链接(DAC)。DAC允许管理员访问运行的服务器以执行诊断函数或Transact—SQL语句,或对服务器上的问题进行故障排除,即使服务器以锁定或在非正常状态下运行。DAC默认情况下只有服务器上可以使用DAC,但是你可以通过 SQLServer 2005 外围应用配置器设置允许远程计算机上的客户端应用程序使用 DAC,如下图所示你也可以通过下面的SP...  阅读全文

查看数据库、表、索引的物理存储情况

2010-09-13 08:18 by 潇湘隐者, 409 visits, 网摘收藏编辑
摘要:在管理、维护数据库时,经常需要查看数据库文件、日志文件所占用的磁盘空间,以及磁盘还剩下的磁盘空间,你可以通过下面几种方面查看数据库文件详细情况:1: 是通过远程连接(或VPN)连接到数据库服务器,直接去查看。2: 你连接到数据库后,可以通过mssms管理器,选择要查看的数据库,单击右键选择属性。然后选择文件选项,如下图所示。3: 通过SQL命令、脚本查看。3.1: sys.database_files 视图中保存着数据库文件(数据文件、日志文件)等的详细信息SELECT*FROMsys.database_files--通过下面命令,查看系统各磁盘可使用空间。EXECmaster..xp_fix  阅读全文

Microsoft OLE DB Provider for ODBC 组件

2010-09-09 14:51 by 潇湘隐者, 307 visits, 网摘收藏编辑
摘要:Microsoft OLE DB Provider for ODBC (MSDASQL) 一项允许在 OLEDB 和 ADO(它在内部使用 OLEDB)上构建的应用程序通过 ODBC 驱动程序访问数据源的技术。 MSDASQL 是用于连接到 ODBC(而不是数据库)的 OLEDB 访问接口。 MSDASQL 随 Windows 操作系统提供,Windows Server 2008 和 Window...  阅读全文

数据库表的基本信息,你知道吗?

2010-09-03 12:15 by 潇湘隐者, 2110 visits, 网摘收藏编辑
摘要:用SQL Doc生成数据库字典文档的时候,突然发现有字段描叙(Description)这项内容,以前一直没有注意过,故特意研究了一下,结果越挖越深,就写了这篇文章。以前在做数据库脚本开发时,新建表时,对各个字段的描叙要么是记录在文档里面,要么自己建一个表,来保存这些内容,以便日后开发、维护的方便。其实这些信息完全可以放在数据库自己的系统视图里面。对字段的说明、描述一般都放在系统视图sys.exte...  阅读全文

SQL模板资源管理器,你用了吗?

2010-08-21 21:30 by 潇湘隐者, 341 visits, 网摘收藏编辑
摘要:SQL Server Management Studio 有个模板资源管理器,不知你用过没有?使用模板创建脚本、自定义模板等功能能大大提高你的工作效率,如果没有尝试过,赶紧去试试吧。很多时候,我们习惯了手写脚本,而不愿意花费精力去研究陌生的工具。你可以在通过下面方式打开模板资源管理器 视图->模板资源管理器; 也可以通过快捷键CTRL + ALT + T打开它。如图所示,你可以看见里面已经包...  阅读全文

如何书写优雅、漂亮的SQL脚本?

2010-08-16 08:40 by 潇湘隐者, 3852 visits, 网摘收藏编辑
摘要:本篇来聊聊如何书写漂亮、整洁、优雅的SQL脚本,下面这些是我个人总结、整理出来的。姑且做个抛砖引玉吧,呵呵,欢迎大家一起来讨论。我们首先来看看一段创建数据表的脚本(如下所示),你是否觉得有什么不妥或是不足呢?如果是你,你怎样书写呢?代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHig...  阅读全文

SQL Server——存储过程

2010-08-14 01:10 by 潇湘隐者, 2849 visits, 网摘收藏编辑
摘要:我想从下面几个方面大概的讲述下存储过程,可能有些知识点是你没有注意的,也可能有些知识点我不知道,欢迎大家指点指点。如有不足,欢迎指教!存储过程概念存储过程优点存储过程的接口存储过程的解析、编译过程存储过程安全性查看存储过程加密、解密存储过程存储过程概念存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(带参...  阅读全文

SQL Server ——动态SQL

2010-08-05 00:06 by 潇湘隐者, 3712 visits, 网摘收藏编辑
摘要:动态SQL:code that is executed dynamically。它一般是根据用户输入或外部条件动态组合的SQL语句块。动态SQL能灵活的发挥SQL强大的功能、方便的解决一些其它方法难以解决的问题。相信使用过动态SQL的人都能体会到它带来的便利,然而动态SQL有时候在执行性能(效率)上面不如静态SQL,而且使用不恰当,往往会在安全方面存在隐患(SQL 注入式攻击)。动态SQL可以通过...  阅读全文

重温SQL——行转列,列转行

2010-07-28 08:40 by 潇湘隐者, 17605 visits, 网摘收藏编辑
摘要:行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT...CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。 我们首先先通过一个老生常谈的例子,学生成绩表(下面简化了些)来形象了解下行转列CREATE TABLE [StudentScores]( [UserName] NVARCHAR(...  阅读全文

DATEDIFF函数小问题

2010-07-27 08:20 by 潇湘隐者, 233 visits, 网摘收藏编辑
摘要:DATEDIFF函数语法如下DATEDIFF( datepart , startdate , enddate ),返回指定的 startdate 和 enddate 之间所跨的指定 datepart 边界的计数(带符号的整数)。下面来说说我碰到的这个问题。用户表里user里面有个字段Create_Time记录用户注册日期,Last_Login_Time 记录用户最后登录的时间,要统计注册用户在注册...  阅读全文

动态SQL应用小列子

2010-07-21 11:40 by 潇湘隐者, 218 visits, 网摘收藏编辑
摘要:呵呵,几乎成标题党了,今天要写个脚本查询7天内所有有登录玩家的数据,要求按注册日期统计,虽然是个简单的问题,但是关键是用户表有30个,分别是user0, user1......到user29 ,光是把它们UNION ALL起来,我都够郁闷了,你想象下脚本有多长吧,一大堆堆在那儿,光是复制都让你难以忍受。[代码]呵呵,下面是我用动态SQL 改写的,呵呵,简洁多了[代码]这里得提提CHAR(10)这个...  阅读全文

SQL性能调优实践——SELECT COUNT

2010-07-16 10:34 by 潇湘隐者, 5374 visits, 网摘收藏编辑
摘要:最近想深入学习SQL,在网上搜索到一些SQL 优化的资料要么是张冠李戴,Oracle 优化的资料硬是弄成啦MS SQL 优化的资料,而且被很多人转载,收藏,有些要么有些含糊不清,好像是那么回事,也没经过验证,实践出真知!下面是我对SELECT COUNT(*), SELECT COUNT(1),SELECT COUNT (0), SELECT COUNT(Field)等孰优孰劣的测试结果,如果测试...  阅读全文

MS SQL开发命名规则

2010-07-13 17:25 by 潇湘隐者, 479 visits, 网摘收藏编辑
摘要:下面的SQL开发命名规则是我自己开发时总结、整理出来的,以后的开发过程中将不断完善、修改。也希望各位网友指点、批判。 纲领: SQL 语句关键字全部大写, 命名规则建议使用Pascal Case 或 每个单词使用下划线_隔开,不建议全部使用小写。尽量少使用特殊字符比如数字、空格等 使用英文或英文缩写,不建议使用拼音。尽量见名知意。 1: 数据库名命...  阅读全文

XP系统无法运行SQL Server 2005企业版

2010-04-12 21:59 by 潇湘隐者, 883 visits, 网摘收藏编辑
摘要:一直都是在Windows 2003上面做开发的,直到最近换了XP系统,装了个SQL Server 2005 企业版本,装的时候就觉得比较怪异,发现有些组件都安装不了,印象中在Windows 2003上面安装没有这个现象,安装完后,打开SQL Server Management器,发现打开服务器名称也找不到对应的实例 于是我打开SQL Server 2005外围应用配置器,点击“服务和连接的外围应用配置器”出现如下图错误。刚开始我以为是SQL Server 2005有些组件安装不成功或是配置引起的错误,于是在网上查找这个错误的原因,结果发现有位网友在这篇帖子里有提及和我比较类似的情况, htt.  阅读全文

数据查询表,列名对比

2010-01-19 09:28 by 潇湘隐者, 359 visits, 网摘收藏编辑
摘要:在数据库里创建、删除表时,往往需要判断这个表是否存在; 有时候在修改表字段,比如添加、删除字段时也需要事先判断该字段是否存在,这往往有对应的脚本或操作,不同的数据库有不同的相关的对象、脚本。下面我们拿Access 2003 , SQL Server 2005 , Oracle 10i来分析对比一下吧。 一:在SQL Server 2005 里查询某个表是否存在以及查询某个表有哪些字段的...  阅读全文

MS SQL 建表SQL的脚本

2009-08-29 03:22 by 潇湘隐者, 1190 visits, 网摘收藏编辑
摘要:数据库里新建一个表的方式比较多,可以在对象资源管理器手动新建一个表,这样的建表方式比较方便、直观。但是如果该表要在几个数据库(开发环境数据库,测试环境数据库、正式系统数据库等)里新建的话,这时反而不如用脚本处理,这样会方便得多。尤其是在创建数据库时要新建上百个表时,那种手工建表方式想都不敢想。这里主要讨论、收集使用脚本来新建表的写法。如有不妥或不对的地方,希望大家多多指教,更正我的错误。下面来看看第一种SQL写法Code SnippetCREATE TABLE UserContactPerson(IDINT PRIMARY KEY,UserIDINT,ContactPersonIDINT)这.  阅读全文