可以自己查询系统表:
SELECT o.name AS tableName, c.name AS columnName, p.[value] AS Description
FROM sysproperties p INNER JOIN
      sysobjects o ON o.id = p.id INNER JOIN
      syscolumns c ON p.id = c.id AND p.smallid = c.colid
WHERE (p.name = 'MS_Description')
ORDER BY o.name

--创建表及描述信息

create   table   表(a1   varchar(10),a2   char(2))

--为表添加描述信息
EXECUTE   sp_addextendedproperty   N'MS_Description',   '人员信息表',   N'user',   N'dbo',   N'table',   N'表',   NULL,   NULL

--为字段a1添加描述信息
EXECUTE   sp_addextendedproperty   N'MS_Description',   '姓名',   N'user',   N'dbo',   N'table',   N'表',   N'column',   N'a1'

--为字段a2添加描述信息
EXECUTE   sp_addextendedproperty   N'MS_Description',   '性别',   N'user',   N'dbo',   N'table',   N'表',   N'column',   N'a2'
--更新表中列a1的描述属性:
EXEC   sp_updateextendedproperty   'MS_Description','字段1','user',dbo,'table','表','column',a1

--删除表中列a1的描述属性:
EXEC   sp_dropextendedproperty   'MS_Description','user',dbo,'table','表','column',a1

--删除测试
drop   table   表 

至于查询出来,sql server有提供系统函数fn_listextendedproperty ():

--获取某一个字段的描述
SELECT   *
FROM   ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', '表名', 'column', default)--其他变数,按照你的要求你照写即可,只要表名换成你的 

where objname = '字段名' 

 

 

查询数据表的列名、数据类型、长度、主键、允许空、描述的SQL语句


Create   table   #sysPkeysTemp(   

              table_qualifier   varchar(20),   

              table_owner   varchar(20),   

              table_name     varchar(20),   

              Column_name   varchar(20),   

              Key_Seq           Integer,   

              PK_Name           varchar(20)   

  )   

 Insert   Into   #sysPkeysTemp 

exec sp_pkeys 'JC_BDZ'


Create   table   #sysdescription(   

              objtype  nvarchar(200),   

              objname   nvarchar(200),   

              name     nvarchar(200),   

              value   sql_variant

  Insert   Into   #sysdescription   

 SELECT   * FROM   ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', 'JC_BDZ', 'column', default) where name='MS_Description'



select

 case

 when syscolumns.name in(select Column_name from #sysPkeysTemp) then '是' 

else '否' 

end as '主键',

 syscolumns.name as 列名 , systypes.name  as 数据类型,

case when SUBSTRING(systypes.name,1,1)='n' then syscolumns.length/2

else syscolumns.length

end as 长度,

case when syscolumns.isnullable=0 then '否'

else '是'

end as 允许空


,#sysdescription.value as 描述

from syscolumns ,systypes ,#sysdescription

where id=(select max(id) from sysobjects where xtype='u' and name='JC_BDZ') 

and syscolumns.xusertype=systypes.xusertype

and syscolumns.name=#sysdescription.objname

order by colid


drop table #sysPkeysTemp

drop table #sysdescription 

查询结果如下图: 

 

 

--读取库中的所有表名 

select name from sysobjects where xtype='u' 

--读取指定表的所有列名 

select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')



SQL SERVER 中,如果直接   select * from tablename where column1 = ' XXXX '    是不区分大小写的,那该如何做到让SQL区分大小写呢?


collate解释上说其是选择排序用(太长,没用心看),但也可用在查询区分大小写上,如:
select * from tablename where    column1 collate Chinese_PRC_CS_AS= 'Xxxx'
select * from s where sn collate Chinese_PRC_CS_AS like 'L%'

CI     指定不区分大小写,CS     指定区分大小写。
AI     指定不区分重音,AS     指定区分重音。  
Omitted     指定不区分大小写,WS     指定区分大小写。

 

 

----------------------------------------------------------------------------------附加数据库 
sp_attach_db   '数据库名','数据库全路径','数据库日志全路径' 
GO 
USE 数据库名 
--添加一个登录前指定默认数据库 
EXEC sp_addlogin '登录名','密码','数据库名' 
GO 
--处理空登录名(使登录用户和数据库的孤立用户对应起来,在这个用户有对象时用) 
sp_change_users_login 'update_one','登录名','登录名' 
GO 
--修改数据库的逻辑文件名(数据) 
ALTER DATABASE NEW 
MODIFY FILE(NAME='Old_Data',NEWNAME='New_Data') 
GO 
--修改数据库的逻辑文件名(日志) 
ALTER DATABASE NEW 
MODIFY FILE(NAME='Old_Log',NEWNAME='New_Log') 
GO 
-------------------------------------------------------------------------------- 
可能会用到的操作: 
--更改当前数据库名称为dbo的登录名为abc 
EXEC sp_changedbowner 'abc' 

--删除一个登录 
EXEC sp_droplogin '登录名' 
--赋予这个登录访问数据库的权限 
EXEC sp_adduser '登录名','用户名','db_owner' 

========================================================= 
今天在备份一数据库还原给另一数据库时,发现还原不了,看了下原数据库的逻辑文件名和物理文件名不一致,现以下方法可更改文件名的一致。 
在 SQL Server 的企业管理器中,似乎不能直接更改数据库名称,如果要更改,最方便的是在查询分析器中运行: 
alter database 原数据库名称 

modify name=新数据库名称  

SQL Server 中,数据库还原时可以更改物理文件名,也可以分离数据库,直接更改 mdf 的文件名再附加,但更改逻辑文件名似乎不那么直观。 
在查询分析器里运行: 
alter database 数据库名称 
modify file(name=原逻辑文件名, newname=新逻辑文件名) 

这样就可以更改逻辑文件名了,由于 SQL Server 有数据文件和日志文件,所以数据文件和日志文件的逻辑文件名都要更改的话,就得写两个类似于上述的语句。  

 

sql server各系统表作用

Posted by dbsos on 二月 27, 2009 
SQL Server数据库

简单介绍下sql各个系统表的作用

    SQL系统表

  • sysaltfiles 主数据库 保存数据库的文件
  • syscharsets 主数据库 字符集与排序顺序
  • sysconfigures 主数据库 配置选项
  • syscurconfigs 主数据库 当前配置选项
  • sysdatabases 主数据库 服务器中的数据库
  • syslanguages 主数据库 语言
  • syslogins 主数据库 登陆帐号信息
  • sysoledbusers 主数据库 链接服务器登陆信息
  • sysprocesses 主数据库 进程
  • sysremotelogins 主数据库 远程登录帐号
  • syscolumns 每个数据库 列
  • sysconstrains 每个数据库 限制
  • sysfilegroups 每个数据库 文件组
  • sysfiles 每个数据库 文件
  • sysforeignkeys 每个数据库 外部关键字
  • sysindexs 每个数据库 索引
  • sysmenbers 每个数据库 角色成员
  • sysobjects 每个数据库 所有数据库对象
  • syspermissions 每个数据库 权限
  • systypes 每个数据库 用户定义数据类型
  • sysusers 每个数据库 用户

 2009-05-25 Add

数据类型转换有两种:

  • 隐性转换对于用户是不可见的。

    SQL Server 自动将数据从一种数据类型转换成另一种数据类型。例如,如果一个 smallint 变量和一个 int 变量相比较,这个 smallint 变量在比较前即被隐性转换成 int 变量。

  • 显式转换使用 CAST 或 CONVERT 函数。

CAST 和 CONVERT 函数将数值从一个数据类型(局部变量、列或其它表达式)转换到另一个数据类型。例如,下面的 CAST 函数将数值 $157.27 转换成字符串 '$157.27':

CAST ( $157.27 AS VARCHAR(10) )

CAST 函数基于 SQL-92 标准并且优先于 CONVERT。

当从一个 SQL Server 对象的数据类型向另一个转换时,一些隐性和显式数据类型转换是不支持的。例如,nchar 数值根本就不能被转换成 image 数值。nchar 只能显式地转换成 binary,隐性地转换到 binary 是不支持的。nchar 可以显式地或者隐性地转换成 nvarchar

当处理 sql_variant 数据类型时,SQL Server 支持将具有其它数据类型的对象隐性转换成sql_variant 类型。然而,SQL Server 并不支持从 sql_variant 数据隐性地转换到其它数据类型的对象。

有关在 SQL Server 对象之间所支持的转换的更多信息,请参见 CAST 和 CONVERT。

在应用程序变量和 SQL Server 结果集列、返回代码、参数或参数标记之间转换时,所支持的数据类型转换是由数据库应用程序接口定义。

 

 

 

 

posted on 2009-04-13 15:14  赵保龙  阅读(285)  评论(0编辑  收藏  举报