可以自己查询系统表: 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各个系统表的作用
- 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 结果集列、返回代码、参数或参数标记之间转换时,所支持的数据类型转换是由数据库应用程序接口定义。