如果是sql server2000 可以用:“select name Column_Name,(select top 1 name from systypes where xtype=syscolumns.xtype) Column_Type from syscolumns where id=object_id('表名称') order by colid” string sql = "select c.[name] from syscolumns AS c join sysobjects AS o on c.id=o.id where o.name='v_ExcelTestResult'"; 实验过的 是不是太简单了? 呵呵 不过经常用阿.4. 通过SQL语句来更改用户的密码修改别人的,需要sysadmin role EXEC sp_password NULL, 'newpassword', 'User'如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa 5. 怎么判断出一个表的哪些字段不允许为空?select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename 6. 如何在数据库里找到含有相同字段的表?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 )7. 查询第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] 行数为绝对行数8. SQL Server日期计算a. 一个月的第一天SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) b. 本周的星期一SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) c. 一年的第一天SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) d. 季度的第一天SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) e. 上个月的最后一天 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) f. 去年的最后一天SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) g. 本月的最后一天SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) h. 本月的第一个星期一select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate()) ), 0) i. 本年的最后一天SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。