codememo

테이블의 열 이름을 반환하려면 어떻게 해야 합니까?

tipmemo 2023. 4. 8. 08:30
반응형

테이블의 열 이름을 반환하려면 어떻게 해야 합니까?

SQL Server 2008을 사용하여 테이블의 열 이름을 반환하려면 어떻게 해야 합니까?즉, 테이블에 ID, 이름, 주소, 국가 등의 열이 포함되어 있으며 데이터로서 반환하고 싶습니다.

2008년 버전에는 더 쉬운 방법이 없을지 모르겠습니다.

USE [Database Name]
SELECT COLUMN_NAME,* 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'

이것이 가장 쉬운 방법이다.

exec sp_columns [tablename]

이런 거?

sp_columns @table_name=your table name

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

이거 먹어봐

select * from <tablename> where 1=2

...............................................

OBJECT_ID() 함수를 사용하여 테이블 ID를 찾기 때문에 위의 제안보다 조금 쉬워 보입니다.이 ID를 가진 열은 모두 표의 일부입니다.

SELECT * 
  FROM syscolumns 
 WHERE id=OBJECT_ID('YOUR_TABLE') 

새로운 버전의 일부인 것으로 알고 있는 열이 있는지 확인하기 위해 유사한 쿼리를 사용합니다.{AND name='이 추가된 것과 동일한 쿼리입니다.YOUR_COLUMN'}을(를) where 절로 지정합니다.

IF EXISTS (
        SELECT * 
          FROM syscolumns 
         WHERE id=OBJECT_ID('YOUR_TABLE') 
           AND name='YOUR_COLUMN'
        )
BEGIN
    PRINT 'Column found'
END

사용하고 있다

SELECT st.NAME, sc.NAME, sc.system_type_id
FROM sys.tables st
INNER JOIN sys.columns sc ON st.object_id = sc.object_id
WHERE st.name LIKE '%Tablename%'

다음은 위의 첫 번째 제안 쿼리와 비슷하지만, 작동하려면 데이터베이스를 지정해야 할 경우가 있습니다.쿼리는 TABLE_SCHEMA를 지정하지 않아도 동작합니다.

SELECT COLUMN_NAME
FROM   YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'

그냥 이렇게 해보는 게 어때?

테이블 우클릭 -> 스크립트 테이블 As -> 작성처 -> 새 쿼리 에디터 창?

열의 전체 목록이 스크립트에 표시됩니다.복사하고 필요에 따라 필드를 사용합니다.

USE [Database]

SELECT TABLE_NAME,
       TABLE_SCHEMA,
       [Column_Name],
       [Data_type]
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_SCHEMA = 'dbo'  
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    
  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'

아래 코드를 사용하여 모든 열 이름을 인쇄할 수 있습니다. 코드를 수정하여 원하는 형식으로 다른 세부 정보를 인쇄할 수도 있습니다.

    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"; } }

 } 
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE  Table_name = 'MxLocations';
SELECT @col;

postgresql을 사용하는 경우 다음 쿼리를 적용할 경우 여러 스키마에 동일한 이름의 테이블이 있을 수 있습니다.

SELECT column_name, data_type 
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;

Martin Smith가 언급한 것과 같은 질문을 조금 더 짧게 하겠습니다.

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'

SysColumns는 권장되지 않으므로 다음을 사용합니다.

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.Typesuser_type_id = ID은 데이터베이스.이것은 데이터베이스 내에서 고유합니다.타입의 : " " " "user_type_id = system_type_id

set fmtonly on
select * from yourTable

언급URL : https://stackoverflow.com/questions/600446/how-do-you-return-the-column-names-of-a-table

반응형