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............
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............
检查数据库的缺省字符集和排序规则,区分大小写与这些属性有关
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(失败)
Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitiveChinese_PRC_CS_AS
Chinese-PRC, case-sensitive, accent-sensitive, kanatype-insensitive, width-insensitive
前者是大小写不敏感,后则敏感
<div class="bigatt_bt" title="%name%&#10;(%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">&nbsp;(%size%, %expiretime%)</span><span class="hide">,&nbsp;</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
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复制都能出错!
--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
http://blog.csdn.net/claro/archive/2009/03/24/4020137.aspx
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,
而排序规则仍对大小写不敏感,在示例二及(续)中已证明。
***********************************/