SQL2005第1个问题:今天早上下了示例数据库USE AdventureWorks
GO
select * from production.Product --错误
select * from Production.product --错误
select * from Production.Product --正确SQL不是不区分大小写吗?难道是因为指定了Schema的原因么?就区分大小写了?第2个问题:
我如果不要默认的Schema(dbo),我要自己定义Schema的名称,该怎么定义呢?
比如我数据库底下有20个表,1-5个表的Schema名称为Schema1,6-10的Schema名称为Schema2............

解决方案 »

  1.   

    1、
    检查数据库的缺省字符集和排序规则,区分大小写与这些属性有关
    2、
    sp_changeobjectowner
    更改当前数据库中对象的所有者。语法
    sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'参数
    [@objname =] 'object'当前数据库中现有的表、视图或存储过程的名称。object 的数据类型为 nvarchar(517),没有默认值。object 可用现有对象所有者限定,格式为 existing_owner.object。[@newowner =] 'owner'即将成为对象的新所有者的安全帐户的名称。owner 的数据类型为 sysname,没有默认值。owner 必须是当前数据库中有效的 Microsoft® SQL Server™ 用户或角色或 Microsoft Windows NT® 用户或组。指定 Windows NT 用户或组时,请指定 Windows NT 用户或组在数据库中已知的名称(用 sp_grantdbaccess 添加)。返回代码值
    0(成功)或 1(失败)
      

  2.   

    看你的安装情况了.小P梁装的sql 2005就区分大小写.我装的,不区分.
      

  3.   

    select * from ::fn_helpcollations() Chinese_PRC_CI_AS
    Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitiveChinese_PRC_CS_AS
    Chinese-PRC, case-sensitive, accent-sensitive, kanatype-insensitive, width-insensitive
    前者是大小写不敏感,后则敏感
      

  4.   

    sql2005与sql2000不同,由于架构的更改,sql2005中的排序规则不仅影响值(比如存放在表中的字段值),还影响数据库对象名。比如架构名,表名,列名等等。所以要注意你的库的排序规则是否区分大小写等。
      

  5.   


    <div class="bigatt_bt" title="%name%
(%size%, %expiretime%后过期)"> <div class="ico_big"><a href="%url%" target="_blank"><img src="/zh_CN/htmledition/images/fj/fu_%ext%.gif" /></a></div> <div class="name_big"> <a href="%url%" target="_blank" class="a_name">%name%</a><span class="graytext"> (%size%, %expiretime%)</span><span class="hide">, </span> <div class="down_big"><a href="%url%" target="_blank" >查看下载信息</a></div> </div> </div>
    SELECT
    dtb.collation_name AS [Collation],
    dtb.name AS [DatabaseName2]
    FROM
    master.sys.databases AS dtb
    WHERE
    (dtb.name=N'master')
    Collation    DatabaseName2
    Chinese_PRC_CI_AS    master
      

  6.   

    SELECT
    dtb.collation_name AS [Collation],
    dtb.name AS [DatabaseName2]
    FROM
    master.sys.databases AS dtb
    WHERE
    (dtb.name=N'master')Collation    DatabaseName2
    Chinese_PRC_CI_AS    master复制都能出错!
      

  7.   

    alter database adventureWorks collate Chinese_PRC_CI_AS我这样修改规则怎么不行呢?
      

  8.   

    我晕。当然不行,master中的配置已经固定了。
      

  9.   

    在查询脚本中添加Chinese_PRC_CI_AS 转换?
      

  10.   

    --BY wsh236
    --1. 为数据库指定排序规则
    CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
    GOALTER DATABASE db COLLATE Chinese_PRC_BIN
    GO
    /*====================================*/
    --2. 为表中的列指定排序规则
    CREATE TABLE tb(
    col1 varchar(10),
    col2 varchar(10) COLLATE Chinese_PRC_CI_AS)
    GOALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN
    GOALTER TABLE tb ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_BIN
    GO
    /*====================================*/
    --3. 为字符变量和参数应用排序规则
    DECLARE @a varchar(10),@b varchar(10)
    SELECT @a='a',@b='A'--使用排序规则 Chinese_PRC_CI_AS
    SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' ELSE '@a<>@b' END
    --结果:@a=@b--使用排序规则 Chinese_PRC_BIN
    SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' ELSE '@a<>@b' END
    --结果:@a<>@b
      

  11.   

    不是建表时规定,是安装数据库选择字符集时设置的。
    http://blog.csdn.net/claro/archive/2009/03/24/4020137.aspx
      

  12.   

    --为了方便理解与博客略有不同
    COLLATE函数与字符集排序规则的思考/****
    by select left('claro',2),in 西安 ,2009-03-24 14:21:34.250
    Microsoft SQL Server 2005 - 9.00.1406.00
     (Intel X86)
       Mar  3 2007 18:40:02
       Copyright (c) 1988-2005 Microsoft Corporation
      Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 
    ****/--COLLATE 子句只能应用于 char、varchar、text、nchar、nvarchar 和 ntext 数据类型。
    --可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则转换。--语法
    COLLATE { <collation_name> | database_default }
    <collation_name> :: = 
         { Windows_collation_name } | { SQL_collation_name }--示例一 :为查询字符集指定排序规则 (对于数据库安装时已设置不同字符集规则的最有效方式)
    --字符集大小写敏感
    DECLARE @t table (col varchar(10))
    insert @t
    SELECT 'a' union all
    select 'A' union all
    SELECT 'a' union all
    select 'A'SELECT * FROM @t
     ORDER BY col COLLATE Chinese_PRC_CS_AS 
    -->结果
    a
    a
    A
    A
    --字符集大小写不敏感
    DECLARE @t table (col varchar(10))
    insert @t
    SELECT 'a' union all
    select 'A' union all
    SELECT 'a' union all
    select 'A'SELECT * FROM @t
     ORDER BY col COLLATE Chinese_PRC_CI_AS 
    -->结果
    a
    A
    a
    A
    --示例二:虽可以修改数据库指定的排序规则(对于数据库安装时已设置字符集规则的无效)
    --新建数据库并指定大小写不敏感
    CREATE DATABASE db1 COLLATE Chinese_PRC_CI_AS
    GO
    --查询数据库字符集
    SELECT dtb.collation_name AS [Collation],
    dtb.name AS [DatabaseName2]
    FROM
    master.sys.databases AS dtb
    WHERE
    (dtb.name=N'db1')
    -->结果
    Collation DatabaseName2
    Chinese_PRC_CI_AS db1--修改指定数据库排序规则(大小写敏感)
    ALTER DATABASE [db1] COLLATE Chinese_PRC_CS_AS
    GO
    --查询数据库字符集
    -->结果
    Collation DatabaseName2
    Chinese_PRC_CS_AS db1
    --示例二(续):虽可以修改表中的列指定的排序规则(对于数据库安装时已设置字符集规则的无效)
    use db1CREATE table db2 (
    col1 varchar(10) ,
    col2 varchar(10) COLLATE Chinese_PRC_CI_AS)
    GOinsert db2
    SELECT 'a','A' union all
    select 'A','a' union all
    SELECT 'a','A' union all
    select 'A','a'
    --(4 行受影响)
    --查询表指定列字符集
    select * from db2
    col1 col2
    a A
    A a
    a A
    A a--修改表中指定列的排序规则
    ALTER TABLE db2 ALTER COLUMN col1 varchar(10) COLLATE Chinese_PRC_CI_AS
    ALTER TABLE db2 ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_CS_AS
    GO
    --命令已成功完成。
    --查询表指定列字符集
    select * from db2
    col1 col2
    a A
    A a
    a A
    A a/****** 对象:  Database [db1]    脚本日期: 03/24/2009 14:35:15 ******/
    DROP DATABASE [db1]/***********************************
    以上示例表明:数据库及表的排序规则默认与安装数据库时设置一致,后期修改无效,故示例一的方式较合理。
    SELECT dtb.collation_name AS [Collation],
    dtb.name AS [DatabaseName2]
    FROM
    master.sys.databases AS dtb
    WHERE
    (dtb.name=N'MASTER')Collation DatabaseName2
    Chinese_PRC_CI_AS master
    --安装时默认数据库字符集排行规则为Chinese_PRC_CI_AS,虽新建数据库并指定字符集为Chinese_PRC_CS_AS,
    而排序规则仍对大小写不敏感,在示例二及(续)中已证明。
    ***********************************/