답변:
2008 버전에 더 쉬운 방법이 있는지 확실하지 않습니다.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
가장 쉬운 방법입니다
exec sp_columns [tablename]
한 가지 방법은 syscolumns를 쿼리하는 것입니다.
select
syscolumns.name as [Column],
syscolumns.xusertype as [Type],
sysobjects.xtype as [Objtype]
from
sysobjects
inner join
syscolumns on sysobjects.id = syscolumns.id
where sysobjects.xtype = 'u'
and sysobjects.name = 'MyTableName'
order by syscolumns.name
Objtype
그래도 중복 열을 찾습니다. :
OBJECT_ID () 함수를 사용하여 테이블의 ID를 찾기 때문에 위의 제안보다 약간 더 쉽습니다 . 해당 ID를 가진 모든 열은 테이블의 일부입니다.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
필자는 비슷한 쿼리를 사용하여 내가 알고있는 열이 최신 버전의 일부인지 확인합니다. where 절에 {AND name = 'YOUR_COLUMN'}을 추가 한 것과 동일한 쿼리입니다.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
이 시도
select * from <tablename> where 1=2
...............................................
WHERE 1=2
반환하고 여전히 열 메타 데이터를 반환한다는 것입니다. ODBC와 같은 프로그래밍 인터페이스를 사용하는 경우이 열 정보는 프로그램 내의 커서 객체에서 목록 / 배열로 액세스 할 수 있습니다. 순수한 SQL 컨텍스트에서는 의미가 없지만 Python / Java / C / etc를 통해 데이터베이스에 연결할 때 간결한 접근 방식입니다.
왜 이것을 시도해보십시오 :
테이블-> 다른 이름으로 스크립트 테이블-> 작성-> 새 쿼리 편집기 창을 마우스 오른쪽 단추로 클릭하십시오.
전체 열 목록이 스크립트에 제공됩니다. 이를 복사하고 필요에 따라 필드를 사용하십시오.
"I want to return these as data"
에는 값이 표시되지만 OP는 런타임시 데이터를 원할 가능성이 높습니다.
CREATE PROCEDURE [dbo].[Usp_GetColumnName]
@TableName varchar(50)
AS
BEGIN
BEGIN
SET NOCOUNT ON
IF (@TableName IS NOT NULL)
select ORDINAL_POSITION OrderPosition,COLUMN_NAME ColumnName from information_schema.columns
where table_name =@TableName
order by ORDINAL_POSITION
END
END
syscolumns.colid 값이 sp_columns의 일부로 반환 된 'ORDINAL_POSITION'값과 같은지 확실하지 않지만 다음과 같은 방식으로 사용하고 있습니다. 잘못 알려주지 않기를 바랍니다.
여기에 내가 찾은 다른 답변 중 일부에 약간의 변형이 있습니다. 표의 열 위치 또는 순서가 응용 프로그램에서 중요하기 때문에 이것을 사용합니다. 기본적으로 '열 (n)이란 무엇입니까? ? '
sp_columns는 많은 불필요한 것들을 반환하며 T-SQL 함수보다 select가 더 편리 하므로이 경로를 사용했습니다.
select
syscolumns.name,
syscolumns.colid
from
sysobjects, syscolumns
where
sysobjects.id = syscolumns.id and
sysobjects.xtype = 'u' and
sysobjects.name = '<YOUR_TABLE>'
order by syscolumns.colid
@Gulzar Nazim의 대답은 훌륭하지만 쿼리에 데이터베이스 이름 을 포함시키는 것이 더 쉬울 것입니다 . 이는 다음 SQL을 통해 얻을 수 있습니다.
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
아래 코드를 사용하여 모든 열 이름을 인쇄 할 수 있습니다. 또한 형식 u와 같은 다른 세부 정보를 인쇄하도록 코드를 수정할 수 있습니다
declare @Result varchar(max)='
'
select @Result=@Result+''+ColumnName+'
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id('tblPracticeTestSections')
) t
order by ColumnId
print @Result
산출
column1
column2
column3
column4
C # 클래스와 동일한 코드를 사용하여 테이블과 열 이름을 인쇄하려면 아래 코드를 사용하십시오.
declare @TableName sysname = '<EnterTableName>'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'
select @Result = @Result + '
public static string ' + ColumnName + ' { get { return "'+ColumnName+'"; } }
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)
) t
order by ColumnId
set @Result = @Result + '
}'
print @Result
산출:
public class tblPracticeTestSections
{
public static string column1 { get { return "column1"; } }
public static string column2{ get { return "column2"; } }
public static string column3{ get { return "column3"; } }
public static string column4{ get { return "column4"; } }
}
이후 SYSCOLUMNS이되지 않습니다 , 사용 Sys.All_Columns
:
Select
ObjectName = Object_Name(Object_ID)
,T.Name
,C.*
,T.*
From
Sys.All_Columns C
Inner Join Sys.Types T On T.User_Type_Id = C.User_Type_Id
Where [Object_ID] = Object_ID('Sys.Server_Permissions')
--Order By Name Asc
Select * From Sys.Types
user_type_id = ID
유형의 수율 입니다. 이것은 데이터베이스 내에서 고유합니다. 시스템 데이터 유형의 경우 : user_type_id = system_type_id
.