zoukankan      html  css  js  c++  java
  • 谈谈SQL 中 “type in (N'U')”的意思

    示例:SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')

    问题:N和U是什么意思?

    答案:N是指Unicode编码,防止乱码;U是指用户表

    解释:

    1.使用 Unicode 数据  
    Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案。所有的计算机都用单一的 Unicode 标准 Unicode 数据中的位模式一致地翻译成字符。这保证了同一个位模式在所有的计算机上总是转换成同一个字符。数据可以随意地从一个数据库或计算机传送到另一个数据库或计算机,而不用担心接收系统是否会错误地翻译位模式。  

    对于用一个字节编码每个字符的数据类型,存在的问题之一就是此数据类型只能表示 256 个不同的字符。这就迫使对于不同的字母表(例如相对较小的欧洲字母表)采用多重编码规格(或者代码页)。而且也不可能处理象日文汉字或韩国文字这样具有数千个字符的字母表。  

    每个 Microsoft? SQL Server? 排序规则都有一个对表示 char、varchar 和 text 值中的每个字符定义位模式进行定义的代码页。可为个别的列和字符常量指派不同的代码页。客户端计算机使用与操作系统区域设置相关联的代码页解释字符位模式。有很多种不同的代码页。一些字符出现在某些代码页上,但并不出现在其它的代码页上。某些字符在一些代码页上用一个位模式定义,而在其它的代码页上却用另一个位模式定义。当您设计必须处理不同语言的国际性系统时,为了满足不同国家/地区的语言需求,给所有的计算机挑选代码页就变得困难了。要保证每一台计算机与使用不同代码页的系统交互时都进行正确的翻译也是困难的。  

    Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。  

    在 Microsoft SQL Server 中,以下数据类型支持 Unicode 数据:   

    nchar  


    nvarchar  


    ntext   


    说明 这些数据类型的前缀 n 来自 SQL-92 标准中的 National(Unicode)数据类型。  

    nchar、nvarchar 和 ntext 的用法分别与 char、varchar 和 text 的用法一样,但在以下方面不同:   

    Unicode支持的字符范围更大。  


    存储 Unicode 字符所需要的空间更大。  


    nchar 和 nvarchar 列最多可以有 4,000 个字符,而不象 char 和 varchar 字符那样可以有 8,000 个字符。  


    Unicode 常量使用 N 开头来指定:N'A Unicode string'。  


    所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。 

    -----------------------------------------------------------------------------------------------------------------------------------------------

    2.U

    SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。以下是此系统表的字段名称和相关说明。 Name,id,xtype,uid,status:分别是对象名,对象ID,对象类型,所有者对象的用户ID,对象状态。 对象类型(xtype)。可以是下列对象类型中的一种: C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARY KEY 约束(类型是 K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K) V = 视图 X = 扩展存储过程 当xtype='U' and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。 用: select * from misa.dbo.sysobjects where xtype='U'and status>0 就可以列出库misa中所有的用户建立的表名。 SELECT * FROM SYSOBJECTS WHERE PARENT_OBJ = OBJECT_ID( 'CS') AND XTYPE='TR' 列出表cs的所有属性,上面是trigger!

     

    IF EXISTS (SELECT name FROM sysobjects       WHERE name = 'proc2' AND type = 'P')    DROP PROCEDURE proc2 GO 这句话的意思是如果存在 名字为 pro2 的存储过程就删除!

    列名

    数据类型

    说明

    name

    sysname

    对象名

    id

    int

    对象标识号

    xtype

    char(2)

    对象类型。 可以是以下对象类型之一:

    AF = 聚合函数 (CLR)

    C = CHECK 约束

    D = 默认值或 DEFAULT 约束

    F = FOREIGN KEY 约束

    L = 日志

    FN = 标量函数

    FS = 程序集 (CLR) 标量函数

    FT = 程序集 (CLR) 表值函数

    IF = 内联表函数

    IT = 内部表

    P = 存储过程

    PC = 程序集 (CLR) 存储过程

    PK = PRIMARY KEY 约束(type 为 K)

    RF = 复制筛选存储过程

    S = 系统表

    SN = 同义词

    SQ = 服务队列

    TA = 程序集 (CLR) DML 触发器

    TF = 表函数

    TR = SQL DML 触发器

    TT = 表类型

    U = 用户表

    UQ = UNIQUE 约束(type 为 K)

    V = 视图

    X = 扩展存储过程

    uid

    smallint

    对象所有者的架构 ID。

    对于从旧版 SQL Server 升级的数据库,架构 ID 等于所有者的用户 ID。

    重要说明 重要提示

    如果使用以下任何一个 SQL Server DDL 语句,则必须使用 sys.objects 目录视图而不是 sys.sysobjects。

    CREATE | ALTER | DROP USER

    CREATE | ALTER | DROP ROLE

    CREATE | ALTER | DROP APPLICATION ROLE

    CREATE SCHEMA

    ALTER AUTHORIZATION ON OBJECT

    如果用户数和角色数超过 32,767,则发生溢出或返回 NULL。

    info

    smallint

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    status

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    base_schema_ver

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    replinfo

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    parent_obj

    int

    父对象的对象标识号。 例如,表 ID(如果父对象是触发器或约束)。

    crdate

    datetime

    对象的创建日期。

    ftcatid

    smallint

    注册为使用全文索引的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。

    schema_ver

    int

    在每次更改表的架构时都会增加的版本号。 总是返回 0。

    stats_schema_ver

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    type

    char(2)

    对象类型。 可以是下列值之一:

    AF = 聚合函数 (CLR)

    C = CHECK 约束

    D = 默认值或 DEFAULT 约束

    F = FOREIGN KEY 约束

    FN = 标量函数

    FS = 程序集 (CLR) 标量函数

    FT = 程序集 (CLR) 表值函数 IF = 内联表函数

    IT - 内部表

    K = PRIMARY KEY 或 UNIQUE 约束

    L = 日志

    P = 存储过程

    PC = 程序集 (CLR) 存储过程

    R = 规则

    RF = 复制筛选存储过程

    S = 系统表

    SN = 同义词

    SQ = 服务队列

    TA = 程序集 (CLR) DML 触发器

    TF = 表函数

    TR = SQL DML 触发器

    TT = 表类型

    U = 用户表

    V = 视图

    X = 扩展存储过程

    userstat

    smallint

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    sysstat

    smallint

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    indexdel

    smallint

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    refdate

    datetime

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    version

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    deltrig

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    instrig

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    updtrig

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    seltrig

    int

    标识为仅供参考。不提供支持。不保证以后的兼容性。

    category

    int

    用于发布、约束和标识。

    cache

    smallint

    标识为仅供参考。不提供支持。不保证以后的兼容性。

     

  • 相关阅读:
    Windows程序调试系列: 使用VC++生成调试信息 转
    mysql基础
    mysql bug
    VS2010下配置Winpcap 开发环境
    WIN7 下面 装XP
    Iptables 指南 1.1.19
    mysql内核 innodb存储引警(卷1)配书 用VS 2003 编绎 mysql-3.23.49 源代码
    cmake
    Windows+VS2012环境下编译调试MySQL源码 转
    哈佛图书馆自习室墙上的训言 (自勉)
  • 原文地址:https://www.cnblogs.com/8090sns/p/TypeIn.html
Copyright © 2011-2022 走看看