谈谈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。
如果用户数和角色数超过 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 |
标识为仅供参考。不提供支持。不保证以后的兼容性。 |
阿里云: www.aliyun.com
华赐软件: www.huacisoft.com
C#开源社区: www.opencsharp.net
清泓美肤苑: 清泓美肤苑
bootstrap权限管理系统: Asp.Net Mvc3 bootstrap权限管理系统