分类目录归档:SQL Server

SQL Server

孤立用户故障排除

孤立用户故障排除

要登录到 Microsoft SQL Server 的实例,主体必须有一个有效的 SQL Server 登录名。 在身份验证过程中会使用此登录名,以验证是否允许主体连接到该 SQL Server 实例。 可在 sys.server_principals 目录视图和 sys.syslogins 兼容性视图中查看服务器实例上的 SQL Server 登录名。

SQL Server 登录名使用映射到 SQL Server 登录名的数据库用户访问各个数据库。 此规则有两种例外情况:

  • guest 帐户。 这个帐户在数据库中启用后,能够使未映射到数据库用户的 SQL Server 登录名作为 guest 用户进入数据库。
  • Microsoft Windows 组成员身份。 如果某 Windows 用户是 Windows 组的成员,并且此组也是数据库中的用户,则基于该 Windows 用户创建的 SQL Server 登录名可以进入数据库。

有关 SQL Server 登录名与数据库用户的映射关系的信息存储在数据库中。 其中包括数据库用户的名称以及对应 SQL Server 登录名的 SID。 该数据库用户的权限用于在数据库中进行授权。 继续阅读

如何在 SQL Server 2005 实例之间传输登录和密码

本文介绍如何在不同服务器上的 Microsoft SQL Server 2005 实例之间传输登录和密码。

有关如何在其他版本的 SQL Server 实例之间传输登录和密码的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

246133 如何在 SQL Server 实例之间传输登录和密码

继续阅读

[Microsoft][ODBC SQL Server Driver][Shared Memory]一般性网络错误

症状:

Windows 2003 安装MS SQL 2000过程中出现如下错误:

driver={sql server};server=hy-s7b;UID=sa;PWD=;database=master
[Microsoft][ODBC SQL Server Driver][Shared Memory]一般性网络错误。
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionRead (WrapperRead()).
driver={sql server};server=hy-s7b;UID=sa;PWD=;database=master
[Microsoft][ODBC SQL Server Driver][Shared Memory]一般性网络错误。
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionRead (WrapperRead()).
driver={sql server};server=hy-s7b;UID=sa;PWD=;database=master
[Microsoft][ODBC SQL Server Driver][Shared Memory]一般性网络错误。
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionRead (WrapperRead()).

解决办法:

安装/升级MDAC

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c

SQL Server 的 DBCC CHECKDB 的使用

推荐每次备份数据库以后进行一次,要获得好的 DBCC 性能的一些建议

  • 在系统使用率较低时运行 CHECKDB。
  • 请确保未同时执行其它磁盘 I/O 操作,例如磁盘备份。
  • tempdb 放到单独的磁盘系统或快速磁盘子系统中。
  • 允许 tempdb 在驱动器上有足够的扩展空间。使用带有 ESTIMATE ONLY 的 DBCC 估计 tempdb 将需要多少空间。
  • 避免运行占用大量 CPU 的查询或批处理作业。
  • 在 DBCC 命令运行时,减少活动事务。
  • 使用 NO_INFOMSGS 选项显著减少处理和 tempdb 的使用。

继续阅读

通用分页显示查询存储过程

/*
 功能描述: 通用分页显示查询
    条件:表中不存在标示递增字段
 输入参数:
    @tblName:  表名  
    @strGetFields: 需要返回的列 '*':返回所以列信息
    @fldName:  排序的字段名
    @OrderType:  设置排序类型, 非 0 值则降序
    @PageSize:  页尺寸
    @PageIndex:  页码
    @doCount:  返回记录总数, 非 0 值则返回
    @strOrderBy: 缺省排序字段信息 (注意: 不要加 ORDER BY)
        格式: Field1 DESC,Field2 ASC,
    @strWhere:  查询条件 (注意: 不要加 WHERE)
 输出参数: @RecordCount: 记录总数
 作    者: ningfeiyang
 创建时间: 2005-01-19
 更改纪录:
*/<!--more-->


ALTER PROCEDURE Pagination2
 (
  @tblName   varchar(255),
  @strGetFields varchar(1000) = '*',
  @fldName varchar(255) = '',
  @PageSize   int = 10,
  @PageIndex  int = 1,
  @doCount  bit = 0,
  @OrderType bit = 0,
  @strOrderBy varchar(500) = '',
  @strWhere  varchar(1500) = '',
  @RecordCount int output
 )
AS
 DECLARE @strSQL   varchar(5000)       -- 主语句
 DECLARE @strTmp   varchar(200)        -- 临时变量
 DECLARE @strOrder varchar(400)        -- 排序变量

 --如果@doCount传递过来的不是0,就执行总数统计
 IF (@doCount != 0)
 BEGIN
  DECLARE @sWhere varchar(2000)
  
  SET @sWhere = ''
  IF (@strWhere != '')
   SET @sWhere = ' WHERE ' + @strWhere
   
  SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(''[dbo].[tmpTable]'') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) '
  SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') '
  SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere
   
  EXEC (@strSQL)
  
  SELECT @RecordCount=Total FROM tmpTable
  
  --删除总数统计临时表
  EXEC ('DROP TABLE tmpTable')
 END
 
 --PRINT @RecordCount
 
 --如果@OrderType不是0,就执行降序
 IF (@OrderType != 0)
 BEGIN
  SET @strTmp = ' < (SELECT MIN'
  SET @strOrder = ' ORDER BY ' + @strOrderBy + '[' + @fldName + '] DESC'
 END
 ELSE
 BEGIN
  SET @strTmp = ' > (SELECT MAX'
  SET @strOrder = ' ORDER BY ' + @strOrderBy + '[' + @fldName + '] ASC'
 END

 --如果是第一页就执行以上代码,这样会加快执行速度
 IF @PageIndex = 1
 BEGIN
  IF @strWhere != ''   
   SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + '  FROM [' + @tblName + '] WHERE ' + @strWhere + ' ' + @strOrder
  ELSE
   SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + '  FROM ['+ @tblName + '] '+ @strOrder
 END
 ELSE
 BEGIN
  --为搜索表建立自动编号 保存到临时表中
  SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']'
  IF @strWhere != ''
   SET @strSQL = @strSQL + ' WHERE ' + @strWhere + ' ' + @strOrder
  ELSE
   SET @strSQL = @strSQL + @strOrder
 
  --以下代码赋予了@strSQL以真正执行的SQL代码
  SET @strSQL = @strSQL + ' SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM #tmpTable'
     + ' WHERE IID ' + @strTmp + '(IID) FROM (SELECT TOP ' + str((@PageIndex-1)*@PageSize) + ' IID FROM #tmpTable) AS tblTmp) DROP TABLE #tmpTable'
 END
 
 --PRINT @strSQL

 --执行分页查询
 EXEC (@strSQL)

查考文章:http://dev.csdn.net/develop/article/45/45356.shtm

在 SQL Server 实例之间传输登录和密码

HOW TO:在 SQL Server 实例之间传输登录和密码
文章 ID : 246133
最后更新日期 : 2004年3月4日
版本 : 1.0
本任务的内容
• 摘要
• 如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
• 如何从 SQL Server 7.0 向 SQL Server 2000 或者在正运行 SQL Server 2000 的服务器之间传输登录和密码
• 在 Master 数据库中创建和运行存储过程
• 备注
• 参考
继续阅读

Microsoft SQL Server 连接基础知识

引言

该堆栈的顶部是 API 或对象库层。应用程序通过对象库公开的 API 函数或接口 连接到 Microsoft® SQL Server。用于访问 SQL Server 的 API 示例包括 ODBC 和 DB-Library。用 于访问 SQL Server 的对象库示例包括 OLE DB、ADO 和 ADO.NET。由于 ADO 最终使用 OLE DB 与服务器通信,因 此 Windows 应用程序在与 SQL Server 通信时实际上只使用两个常用的对象库,即 OLE DB 和 ADO.NET。由于通 过 ADO 或 ADO.NET 进行连接通常比通过 ODBC 进行连接更普遍(但 SQL Server 的查询分析器和企业管理器仍通 过 ODBC 进行连接),因此本文将从 ADO/OLE DB 和 ADO.NET 的角度介绍 SQL Server 连接体系结构的客户端。如今, 大多数应用程序均通过对象库(而非 ODBC 或类似 API)连接到 SQL Server。 继续阅读

sql-server日志文件总结及日志满的处理办法

交易日志(Transaction logs)是数据库结构中非常重要但又经常被忽略的部分。由于它并不像数据库中的schema那样活跃,因此很少有人关注交易日志。
交 易日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。对于任何每一个交易过程,交易日志都有非常全面的 记录,根据这些记录可以将数据文件恢复成交易前的状态。从交易动作开始,交易日志就处于记录状态,交易过程中对数据库的任何操作都在记录范围,直到用户点 击提交或后退后才结束记录。每个数据库都拥有至少一个交易日志以及一个数据文件。  继续阅读

SQL Server 中易混淆的数据类型

(1)char、varchar、text和nchar、nvarchar、ntext
char和 varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的 数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非 Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。 继续阅读