在T-SQL中如何显示给定表名的列?

sal*_*ere 3 t-sql sql-server exec adventureworks

我试图列出我选择的任何Adventureworks表中的所有列.我可以执行哪些T-sQL语句或存储过程来查看所有列的列表?我想使用我的C#Web应用程序输入一个输入参数= table_name,然后获取所有column_names的列表作为输出.现在我正在尝试执行sp_columns存储过程,但是我不能只使用select和exec组合的一列.有人知道怎么做这个吗?

感谢大家的所有回复,但没有一个答案符合我的要求.让我更多地为您解释我的问题.下面的查询返回我需要的内容.但我的问题是将这个逻辑合并到一个带有输入参数的SP中.所以这是成功的SQL语句:

select col.name from sysobjects obj inner join syscolumns col 
    on obj.id = col.id
    where obj.name = 'AddressType' 
     order by obj.name
Run Code Online (Sandbox Code Playgroud)

目前我的SP看起来像:

CREATE PROCEDURE [dbo].[getColumnNames]
    @TableName VarChar(50)
    AS

    BEGIN
    SET NOCOUNT ON;
    SET @TableName = RTRIM(@TableName)
    DECLARE @cmd AS NVARCHAR(max)
    SET @cmd = N'SELECT col.name from sysobjects obj ' +
    'inner join syscolumns col on obj.id = col.id ' +
    'where obj.name = ' + @TableName
    EXEC sp_executesql @cmd
    END
Run Code Online (Sandbox Code Playgroud)

但我按上述方式运行

exec getColumnNames 'AddressType'
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

Invalid column name 'AddressType'
Run Code Online (Sandbox Code Playgroud)

我该如何做到这一点?

Rem*_*anu 8

select * from sys.columns where object_id = object_id(@tablename);
Run Code Online (Sandbox Code Playgroud)


egr*_*nin 5

您不需要将语句创建为字符串 - 实际上,这就是让您烦恼的原因.试试这个:

CREATE PROCEDURE [dbo].[getColumnNames] @TableName VarChar(50) AS

BEGIN
SET NOCOUNT ON;
SELECT col.name FROM sysobjects obj 
INNER JOIN syscolumns col ON obj.id = col.id 
WHERE obj.name = @TableName
END
Run Code Online (Sandbox Code Playgroud)