write down,forget
分类 Category : SQL Server

SQL Server 切换用户模式

<Category: SQL Server> Comments Off on SQL Server 切换用户模式
在sql server中,数据库不能同时为单用户模式和只供 dbo 使用模式
可以通过使用 alter database 命令来切换使用:
alter database DatabaseName set single_user
该命令限制用户只能逐个访问数据库
alter database DatabaseName set restricted_user
该命令限制只有 db_owner、dbcreator 或 sysadmin 角色的成员才能访问数据库
alter database DatabaseName set multi_user
该命令将数据库的访问权限返回其一般运行状态

在sql server中,数据库不能同时为单用户模式和只供 dbo 使用模式

可以通过使用 alter database 命令来切换使用:

alter database DatabaseName set single_user

该命令限制用户只能逐个访问数据库

alter database DatabaseName set restricted_user

该命令限制只有 db_owner、dbcreator 或 sysadmin 角色的成员才能访问数据库

alter database DatabaseName set multi_user

该命令将数据库的访问权限返回其一般运行状态

本文来自: SQL Server 切换用户模式

sqlserver2008安装报错 “Previous releases of Microsoft Visual Studio 2008″ failed.

<Category: .NET, SQL Server> Comments Off on sqlserver2008安装报错 “Previous releases of Microsoft Visual Studio 2008″ failed.

“Previous releases of Microsoft Visual Studio 2008″ failed.

问题原因,vs2008未安装sp1

解决办法:

1.去掉下面3个安装组件

  • Management Tools
  • Integration Services
  • Business Intelligence Development Studio
  • 2.转到安装目录,执行:

     

     

    本文来自: sqlserver2008安装报错 “Previous releases of Microsoft Visual Studio 2008″ failed.

    [转] SQL优化心得

    <Category: SQL Server> Comments Off on [转] SQL优化心得

    大家都在讨论关于数据库优化方面的东东,刚好参与开发了一个数据仓库方面的项目,以下的一点东西算是数据库优化方面的学习+实战的一些心得体会了,拿出来大家共享。欢迎批评指正阿!

    SQL语句:
    是对数据库(数据)进行操作的惟一途径;
    消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;
    可以有不同的写法;易学,难精通。

    SQL优化:
    固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高。
    应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致

    ORACLE优化器:
    在任何可能的时候都会对表达式进行评估,并且把特定的语法结构转换成等价的结构,这么做的原因是
    要么结果表达式能够比源表达式具有更快的速度
    要么源表达式只是结果表达式的一个等价语义结构
    不同的SQL结构有时具有同样的操作(例如:= ANY (subquery) and IN (subquery)),ORACLE会把他们映射到一个单一的语义结构。

    阅读这篇文章的其余部分 »

    本文来自: [转] SQL优化心得

    [转] 影响SQL server性能的关键三个方面

    <Category: SQL Server> Comments Off on [转] 影响SQL server性能的关键三个方面

    1 逻辑数据库和表的设计
    数据库的逻辑设计、包括表与表之间的关系是优化关系型数据库性能的核心。一个好的逻辑数据库设计可以为

    优化数据库和应用程序打下良好的基础。

    标准化的数据库逻辑设计包括用多的、有相互关系的窄表来代替很多列的长数据表。下面是一些使用标准化

    表的一些好处。

    A:由于表窄,因此可以使排序和建立索引更为迅速

    B:由于多表,所以多镞的索引成为可能

    C:更窄更紧凑的索引

    D:每个表中可以有少一些的索引,因此可以提高insert update delete等的速度,因为这些操作在索引

    多的情况下会对系统性能产生很大的影响

    E:更少的空值和更少的多余值,增加了数据库的紧凑性

    由于标准化,所以会增加了在获取数据时引用表的数目和其间的连接关系的复杂性。太多的表和复杂的连接关系会降低服务器的性能,因此在这两者之间需要综合考虑。
    定义具有相关关系的主键和外来键时应该注意的事项主要是:用于连接多表的主键和参考的键要有相同的数据类型。

    阅读这篇文章的其余部分 »

    本文来自: [转] 影响SQL server性能的关键三个方面

    多个字段排序的sql

    <Category: SQL Server> Comments Off on 多个字段排序的sql

    sql又生疏了…

    Untitled

    SQL的identity函数只有在select into时才可用;
    DB2 的自增列函数 ROW_NUMBER() OVER() ;

    本文来自: 多个字段排序的sql

    深入讲解数据库中User和Schema的关系

    <Category: SQL Server> Comments Off on 深入讲解数据库中User和Schema的关系

     User和Schema比较容易混淆,搞不清他们之间是什么关系,转一篇文章。

    假如我们想了解数据库中的User和Schema究竟是什么关系,首先必须了解一下数据库中User和Schema到底是什么概念。

           在SQL Server2000中,由于架构的原因,User和Schema总有一层隐含的关系,让我们很少意识到其实User和Schema是两种完全不同的概念,不过在SQL Server2005中这种架构被打破了,User和Schema也被分开了。

    首先我来做一个比喻,什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User?我们可以可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的床,Table(床)就被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了J。,然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样,数据库中存储数据的基本单元是Table,现实中每个仓库放置物品的基本单位就是床, User就是每个Schema的主人,(所以Schema包含的是Object,而不是User),其实User是对应与数据库的(即User是每个对应数据库的主人),既然有操作数据库(仓库)的权利,就肯定有操作数据库中每个Schema(房间)的权利,就是说每个数据库映射的User有每个Schema(房间)的钥匙,换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的(包括房间),他有完全的操作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间,呵呵,和现实也太相似了吧。我还可以给User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了,至于分配权限的问题,我留在以后单独的blog中详述。比喻到这里,相信大家都清楚了吧。

    阅读这篇文章的其余部分 »

    本文来自: 深入讲解数据库中User和Schema的关系

    SQL条件处理–Case语句

    <Category: SQL Server> Comments Off on SQL条件处理–Case语句

    SQL中使用CASE处理条件

         在使用SQL的过程中,有时候可能会要对数据进行条件查询。比如字段A为True时查询出“男”,否则查询出“女”。这样就可以不在程序中在去判断了。在SQL中,可以利用Case语句来完成这样的查询。

    一、Case介绍

    CASE
    计算条件列表并返回多个可能结果表达式之一。

    CASE 具有两种格式:

    简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
    CASE 搜索函数计算一组布尔表达式以确定结果。
    两种格式都支持可选的 ELSE 参数。

    语法
    简单 CASE 函数:

    CASE input_expression
        WHEN when_expression THEN result_expression
            [ …n ]
        [
            ELSE else_result_expression
        END

    CASE 搜索函数:

    CASE
        WHEN Boolean_expression THEN result_expression
            [ …n ]
        [
            ELSE else_result_expression
        END

    参数
    input_expression

    是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft® SQL Server™ 表达式。

    WHEN when_expression

    使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。

    n

    占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。

    THEN result_expression

    当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值为 TRUE 时返回的表达式。result expression 是任意有效的 SQL Server 表达式。

    ELSE else_result_expression

    当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。Else_result_expression 是任意有效的 SQL Server 表达式。Else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。

    WHEN Boolean_expression

    使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。

    二、SQL中的Case语句实例

        CASE 函数用于计算多个条件并为每个条件返回单个值。CASE 函数通常的用途是使用可读性更强的值替换代码或缩写。下面的查询使用 CASE 函数重命名书籍的分类,以使之更易理解。

    USE pubs
    SELECT
       CASE type
          WHEN ‘popular_comp’ THEN ‘Popular Computing’
          WHEN ‘mod_cook’ THEN ‘Modern Cooking’
          WHEN ‘business’ THEN ‘Business’
          WHEN ‘psychology’ THEN ‘Psychology’
          WHEN ‘trad_cook’ THEN ‘Traditional Cooking’
          ELSE ‘Not yet categorized’
       END AS Category,
    CONVERT(varchar(30), title) AS “Shortened Title”,
    price AS Price
    FROM titles
    WHERE price IS NOT NULL
    ORDER BY 1

    下面是结果集:

    category            shortened title                Price �
    ——————- —————————— ——-
    Business            Cooking with Computers: Surrep 11.95 �
    Business            Straight Talk About Computers  19.99 �
    Business            The Busy Executive’s Database  19.99 �
    Business            You Can Combat Computer Stress 2.99  �
    Modern Cooking      Silicon Valley Gastronomic Tre 19.99 �
    Modern Cooking      The Gourmet Microwave          2.99  �
    Popular Computing   But Is It User Friendly?       22.95 �
    Popular Computing   Secrets of Silicon Valley      20.00 �
    Psychology          Computer Phobic AND Non-Phobic 21.59 �
    Psychology          Emotional Security: A New Algo 7.99  �
    Psychology          Is Anger the Enemy?            10.95 �
    Psychology          Life Without Fear              7.00  �
    Psychology          Prolonged Data Deprivation: Fo 19.99 �
    Traditional Cooking Fifty Years in Buckingham Pala 11.95 �
    Traditional Cooking Onions, Leeks, and Garlic: Coo 20.95 �
    Traditional Cooking Sushi, Anyone?                 14.99  

    (16 row(s) affected)

    CASE 函数的另一个用途给数据分类。下面的查询使用 CASE 函数对价格分类。

    SELECT
       CASE
          WHEN price IS NULL THEN ‘Not yet priced’
          WHEN price < 10 THEN ‘Very Reasonable Title’
          WHEN price >= 10 and price < 20 THEN ‘Coffee Table Title’
          ELSE ‘Expensive book!’
       END AS “Price Category”,
    CONVERT(varchar(20), title) AS “Shortened Title”
    FROM pubs.dbo.titles
    ORDER BY price

    下面是结果集:

    Price Category        Shortened Title    �
    ——————— ——————–
    Not yet priced        The Psychology of Co
    Not yet priced        Net Etiquette      �
    Very Reasonable Title You Can Combat Compu
    Very Reasonable Title The Gourmet Microwav
    Very Reasonable Title Life Without Fear  �
    Very Reasonable Title Emotional Security:�
    Coffee Table Title    Is Anger the Enemy?�
    Coffee Table Title    Cooking with Compute
    Coffee Table Title    Fifty Years in Bucki
    Coffee Table Title    Sushi, Anyone?     �
    Coffee Table Title    The Busy Executive’s
    Coffee Table Title    Straight Talk About�
    Coffee Table Title    Silicon Valley Gastr
    Coffee Table Title    Prolonged Data Depri
    Expensive book!       Secrets of Silicon V
    Expensive book!       Onions, Leeks, and G
    Expensive book!       Computer Phobic AND�
    Expensive book!       But Is It User Frien

    (18 row(s) affected)

    本文来自: SQL条件处理–Case语句

    SET PARSEONLY 与SET NOEXEC (Transact-SQL)

    <Category: SQL Server> 1 条评论

    SET PARSEONLY
    检查每个 Transact-SQL 语句的语法并返回任何错误消息,但不编译和执行语句。
    SET PARSEONLY { ON | OFF }

    当 SET PARSEONLY 为 ON 时,SQL Server 只分析语句。当 SET PARSEONLY 为 OFF 时,SQL Server 编译并执行语句。

    SET PARSEONLY 的设置是在分析时设置,而不是在执行或运行时设置。

    在存储过程或触发器中不要使用 PARSEONLY。如果 OFFSETS 选项为 ON 而且没有出现错误,则 SET PARSEONLY 返回偏移量。

    SET NOEXEC (Transact-SQL)

    编译每个查询但不执行查询。
    SET NOEXEC { ON | OFF }
    当 SET NOEXEC 为 ON 时,SQL Server 将编译每一批处理 Transact-SQL 语句但并不执行它们。当 SET NOEXEC 设置为 OFF 时,所有批处理将在编译后执行。

    SQL Server 中的语句执行包含两个阶段:编译和执行。该设置可用于让 SQL Server 在执行 Transact-SQL 代码时,验证代码中的语法和对象名。它也可以用于调试通常是较大的批处理中的部分语句。

    SET NOEXEC 设置是在执行或运行时设置,而不是在分析时设置。

     

    USE AdventureWorks;
    GO
    PRINT ‘Valid query’;
    GO
    — SET NOEXEC to ON.
    SET NOEXEC ON;
    GO
    — Inner join.
    SELECT e.EmployeeID, e.Title, v.Name
    FROM HumanResources.Employee e
    INNER JOIN Purchasing.PurchaseOrderHeader poh
    ON e.EmployeeID = poh.EmployeeID
    INNER JOIN Purchasing.Vendor v
    ON poh.VendorID = v.VendorID;
    GO
    — SET NOEXEC to OFF.
    SET NOEXEC OFF;
    GO

    PRINT ‘Invalid object name’;
    GO
    — SET NOEXEC to ON.
    SET NOEXEC ON;
    GO
    — Function name used is a reserved keyword.
    USE AdventureWorks;
    GO
    CREATE FUNCTION dbo.Values(@EmployeeID INT)
    RETURNS TABLE
    AS
    RETURN (SELECT PurchaseOrderID, TotalDue
    FROM dbo.PurchaseOrderHeader
    WHERE EmployeeID = @EmployeeID)
    — SET NOEXEC to OFF.
    SET NOEXEC OFF
    GO

    PRINT ‘Invalid syntax’;
    GO
    — SET NOEXEC to ON.
    SET NOEXEC ON;
    GO
    — Built-in function incorrectly invoked
    SELECT *
    FROM fn_helpcollations;
    — Reset SET NOEXEC to OFF.
    SET NOEXEC OFF;
    GO

    本文来自: SET PARSEONLY 与SET NOEXEC (Transact-SQL)

    从数据库随机读取数据

    <Category: SQL Server> Comments Off on 从数据库随机读取数据

    示例代码:
    SQL Server:Select Top * From  表 Order By NewID()  
    Access  :Select Top * From 表 Order By Rnd(ID) 
            *说明-Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName)  Select Top 10 * From 表 Order BY Rnd(Len(UserName))
     
    MySql:Select * From 表 Order By Rand() Limit 10

    本文来自: 从数据库随机读取数据

    set nocount on 是什么意思?

    <Category: SQL Server> Comments Off on set nocount on 是什么意思?

    我想請問一下: set nocount on 是什麼意思, 為什麼很多的stored procedures的第一行都有遮一句話??多謝!!!
    每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这是些什么信息?在我们调用的时候这些信息有用吗?是否可以关闭呢?

    答案是这些信息在我们的客户端的应用程序中是没有用的,这些信息是存储过程中的每个语句的DONE_IN_PROC 信息。

    我们可以利用SET NOCOUNT 来控制这些信息,以达到提高程序性能的目的。

    MSDN中帮助如下:

    SET NOCOUNT
    使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。

    语法
    SET NOCOUNT { ON | OFF }

    注释
    当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。

    即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。

    当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft SQL Server 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、 UPDATE 和 DELETE)结束时将不会在查询结果中显示”nn rows affected”。

    如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。

    SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。

    权限
    SET NOCOUNT 权限默认授予所有用户。

    结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF这样的话,以达到优化存储过程的目的。

    多说两句:

    1:在查看SqlServer的帮助的时候,要注意“权限”这一节,因为某些语句是需要一定的权限的,而我们往往忽略。

    2:@@ROWCOUNT是返回受上一语句影响的行数,包括找到记录的数目、删除的行数、更新的记录数等,不要认为只是返回查找的记录数目,而且@@ROWCOUNT要紧跟需要判断语句,否则@@ROWCOUNT将返回0。

    3:如果使用表变量,在条件表达式中要使用别名来替代表名,否则系统会报错。

    4:在CUD类的操作中一定要有事务处理。

    5:使用错误处理程序,用来检查 @@ERROR 系统函数的 T-SQL 语句 (IF) 实际上在进程中清除了 @@ERROR 值,无法再捕获除零之外的任何值,必须使用 SET 或 SELECT 立即捕

    本文来自: set nocount on 是什么意思?