现在的位置: 首页 > 综合 > 正文

sql备忘

2013年03月20日 ⁄ 综合 ⁄ 共 1304字 ⁄ 字号 评论关闭


1. 如何取得一个数据表的所有列名

方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
SQL语句如下:
declare @objid int,@objname char(40)
set @objname = 'tablename'
select @objid = id from sysobjects where id = object_id(@objname)
select 'Column_name' = name from syscolumns where id = @objid order by colid

是不是太简单了? 呵呵 不过经常用阿.

2
. 通过SQL语句来更改用户的密码

修改别人的,需要sysadmin role 
EXEC sp_password NULL'newpassword''User'

如果帐号为SA执行EXEC sp_password 
NULL'newpassword', sa 

3
. 怎么判断出一个表的哪些字段不允许为空?

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename 

4
. 如何在数据库里找到含有相同字段的表?
a. 查已知列名的情况
SELECT b.name as TableName,a.name as columnname 
From syscolumns a INNER JOIN sysobjects b 
ON a.id=b.id 
AND b.type='U' 
AND a.name='你的字段名字' 

b. 未知列名查所有在不同表出现过的列名
Select o.name As tablename,s1.name As columnname 
From syscolumns s1, sysobjects o 
Where s1.id = o.id 
 
And o.type = 'U' 
 
And Exists ( 
 
Select 1 From syscolumns s2 
 
Where s1.name = s2.name 
 
And s1.id <> s2.id 
 )

5
. 查询第xxx行数据

假设id是主键: 
select * 
from (select top xxx * from yourtable) aa 
where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)
 
如果使用游标也是可以的 
fetch absolute [number] from [cursor_name] 
行数为绝对行数
   
   6.如果表中某一列为Indentity列,必须加入如下一句话才能向其中手动添加值,同时别忘了关掉
   SET IDENTITY_INSERT TestName ON 
  SET IDENTITY_INSERT TestName OFF

抱歉!评论已关闭.