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)
我该如何做到这一点?
select * from sys.columns where object_id = object_id(@tablename);
Run Code Online (Sandbox Code Playgroud)
您不需要将语句创建为字符串 - 实际上,这就是让您烦恼的原因.试试这个:
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)