查询数据库(Databases)名称:
SELECT b.name + '.' + a.name AS name FROM sysobjects a INNER JOIN sys.schemas b ON a.uid=b.schema_id WHERE OBJECTPROPERTY(id,N'IsUserTable') = 1 AND a.name <> 'dtproperties'
说明:默认情况下Schema是dbo,数据表的名称应该是dbo.TableName.但是有的数据表指定了其他的Schema.比如AdventureWorks 中的表HumanResources.Employee;Production.Product 等等.
查询数据表(Tables)中的字段(Columns)名称:
SELECT * FROM dbo.syscolumns WHERE id=OBJECT_ID(N'[Production].[Product]') ORDER BY colid
有的数据库敏感大小写 ,比如AdventureWorks.所以千万要注意,表名称,Schemas名称要写正确.我就是在我的一个程序里面将 dbo.sysobjects写成 dbo.Sysobjects(首字母大写 )而发生了错误.
PS:有关列举局域网内可用数据库服务器名称的方法请参考我的另一篇日志:
2010/05/28 added:
今天在公司的网络上DEBUG. 连接到一台SQL Server 2000.加载表名称的时候出错了.后来比对自己电脑上的SQL Server 2005.发现 2000没有sys.schemas 这个视图(View).(貌似连Schema的概念都没有.抱歉,我在数据库上面还是比较小白的.)后面尝试多次,由于SQL Server 2005 的sysobjects中并没有保存诸如sys.schemas之类的视图.多次尝试之下,丑陋地完成了兼容性问题:
BEGIN
IF EXISTS (SELECT uid FROM sysobjects where name='sysobjects')
SELECT b.name+'.'+a.name FROM sysobjects a INNER JOIN sysusers b ON a.uid=b.uid WHERE OBJECTPROPERTY(a.id,N'IsUserTable') = 1 AND a.name <> 'dtproperties'
ELSE
SELECT b.name+'.'+a.name FROM sysobjects a INNER JOIN sys.schemas b ON a.uid=b.schema_id WHERE OBJECTPROPERTY(a.id,N'IsUserTable') = 1 AND a.name <> 'dtproperties'
END
SELECT name FROM master.dbo.sysdatabases WHERE status <> 512
查询数据表(Tables)名称:SELECT name FROM dbo.sysobjects WHERE OBJECTPROPERTY(id,N'IsUserTable') = 1 AND name <> 'dtproperties'
查询带Schema 的数据表(Tables)名称:SELECT b.name + '.' + a.name AS name FROM sysobjects a INNER JOIN sys.schemas b ON a.uid=b.schema_id WHERE OBJECTPROPERTY(id,N'IsUserTable') = 1 AND a.name <> 'dtproperties'
说明:默认情况下Schema是dbo,数据表的名称应该是dbo.TableName.但是有的数据表指定了其他的Schema.比如AdventureWorks 中的表HumanResources.Employee;Production.Product 等等.
查询数据表(Tables)中的字段(Columns)名称:
SELECT * FROM dbo.syscolumns WHERE id=OBJECT_ID(N'[Production].[Product]') ORDER BY colid
有的数据库敏感大小写 ,比如AdventureWorks.所以千万要注意,表名称,Schemas名称要写正确.我就是在我的一个程序里面将 dbo.sysobjects写成 dbo.Sysobjects(首字母大写 )而发生了错误.
PS:有关列举局域网内可用数据库服务器名称的方法请参考我的另一篇日志:
2010/05/28 added:
今天在公司的网络上DEBUG. 连接到一台SQL Server 2000.加载表名称的时候出错了.后来比对自己电脑上的SQL Server 2005.发现 2000没有sys.schemas 这个视图(View).(貌似连Schema的概念都没有.抱歉,我在数据库上面还是比较小白的.)后面尝试多次,由于SQL Server 2005 的sysobjects中并没有保存诸如sys.schemas之类的视图.多次尝试之下,丑陋地完成了兼容性问题:
BEGIN
IF EXISTS (SELECT uid FROM sysobjects where name='sysobjects')
SELECT b.name+'.'+a.name FROM sysobjects a INNER JOIN sysusers b ON a.uid=b.uid WHERE OBJECTPROPERTY(a.id,N'IsUserTable') = 1 AND a.name <> 'dtproperties'
ELSE
SELECT b.name+'.'+a.name FROM sysobjects a INNER JOIN sys.schemas b ON a.uid=b.schema_id WHERE OBJECTPROPERTY(a.id,N'IsUserTable') = 1 AND a.name <> 'dtproperties'
END