您可以尝试以下选项,而不是使用sp_help:
1)使用INFORMATION_SCHEMA.COLUMNS视图:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTable'
2)查询sys.columns
SELECT c.*, t.name FROM sys.columns c JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.object_id = OBJECT_ID('YourTable')
这些只是两个选项,将返回单个结果集。 INFORMATION_SCHEMA.COLUMNS不会告诉您(例如)列是否为IDENTITY列,而sys.columns路由的列。 您可以从目录视图中获得更多信息,这取决于您还需要什么。 这是MSDN参考 。
您可能会发现使用INFORMATION_SCHEMA视图更容易 – 您可以构建查询,这些查询将提取与SQL Server数据库模式中的表的结构和关系相关的大部分数据。
请参见此处: http : //msdn.microsoft.com/en-us/library/ms186778.aspx
我有一个简单的方法来获取表的模式。 只需与SqlConnection对象之类的任何提供程序创建连接。 为select查询创建一个命令对象(仅选择前1个记录,因为只需要表的模式)执行返回DataReader对象的查询。 每个DataReader对象都有一个名为GetTableSchema()的方法,它返回具有perticulat表模式的DataTable对象。
这样,您可以轻松地轻松获取任何表的架构。
在这里,我将为此提供一个简单的代码
SqlConnection con=new SqlConnection("connString");
con.Open();
SqlCommand cmd= new SqlCommand("select top(1) * from Person.Address",con);
DataTable table = cmd.ExecuteReader().GetTableSchema();
现在,此表对象具有Person.Address表的架构信息。
此外,您可以使用SqlConnection中的GetSchema方法。 http://msdn.microsoft.com/en-us/library/ms136367.aspx
像这样:
var tableSchema = con.GetSchema(SqlClientMetaDataCollectionNames.Tables, new string[] { null, null, "[tableName]" });
字符串数组是一个’filter’,在这里你可以找到你可以过滤的列: http : //msdn.microsoft.com/en-us/library/ms254969.aspx
对于其他数据库服务器和更多信息: http : //msdn.microsoft.com/en-us/library/kcax58fh.aspx
sp_help在你的代码中不起作用? 也许你需要包含一个执行语句:exec sp_help。 或者应用程序在没有sp_help权限的帐户下运行。
看到这一个…它解释了如何
如何使用GetOleDbSchemaTable和Visual C#.NET检索架构信息