etc./StackOverFlow

SQL Server 테이블에 열이 있는지 확인하는 방법은 무엇입니까?

청렴결백한 만능 재주꾼 2021. 12. 8. 01:19
반응형

질문자 :Maciej


특정 열이 없으면 추가해야 합니다. 다음과 같은 것이 있지만 항상 false를 반환합니다.

 IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'myTableName' AND COLUMN_NAME = 'myColumnName')

SQL Server 데이터베이스의 테이블에 열이 있는지 어떻게 확인할 수 있습니까?



SQL Server 2005 이상:

 IF EXISTS(SELECT 1 FROM sys.columns WHERE Name = N'columnName' AND Object_ID = Object_ID(N'schemaName.tableName')) BEGIN -- Column Exists END

Martin Smith의 버전은 더 짧습니다.

 IF COL_LENGTH('schemaName.tableName', 'columnName') IS NOT NULL BEGIN -- Column Exists END

Mitch Wheat

더 간결한 버전

 IF COL_LENGTH('table_name','column_name') IS NULL BEGIN /* Column does not exist or caller does not have permission to view the object */ END

메타데이터 보기 권한에 대한 요점은 이 답변뿐만 아니라 모든 답변에 적용됩니다.

COL_LENGTH 대한 첫 번째 매개변수 테이블 이름은 필요에 따라 하나, 둘 또는 세 부분 이름 형식이 될 수 있습니다.

다른 데이터베이스의 테이블을 참조하는 예는 다음과 같습니다.

 COL_LENGTH('AdventureWorks2012.HumanResources.Department','ModifiedDate')

메타데이터 보기를 사용하는 것과 비교하여 이 답변의 한 가지 차이점은 COL_LENGTH와 같은 메타데이터 기능은 유효한 격리 수준에 관계없이 항상 커밋된 변경 사항에 대한 데이터만 반환 COL_LENGTH


Martin Smith

특정 요구 사항에 맞게 아래를 조정하십시오.

 if not exists (select column_name from INFORMATION_SCHEMA.columns where table_name = 'MyTable' and column_name = 'MyColumn') alter table MyTable add MyColumn int

질문에 대한 편집을 처리하기 위해 편집 : 작동해야 합니다. 코드에서 어리석은 실수가 있는지 주의 깊게 살펴보십시오. 예를 들어 삽입이 적용되는 동일한 데이터베이스에서 INFORMATION_SCHEMA를 쿼리하고 있습니까? 두 문 중 테이블/열 이름에 오타가 있습니까?


Luke Bennett

이 시도...

 IF NOT EXISTS( SELECT TOP 1 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE [TABLE_NAME] = 'Employees' AND [COLUMN_NAME] = 'EmployeeID') BEGIN ALTER TABLE [Employees] ADD [EmployeeID] INT NULL END

Leon Tayson

컬럼을 삭제하기 전에 컬럼의 존재를 확인하는 사람들을 위해.

SQL Server 2016 부터 IF 래퍼 대신 새로운 DIE 문을 사용할 수 있습니다.

 ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

Pரதீப்

Microsoft는 버전 간에 시스템 테이블을 유지한다고 보장하지 않기 때문에 시스템 테이블보다 INFORMATION_SCHEMA.COLUMNS 를 선호합니다. 예를 들어 dbo.syscolumns 는 SQL 2008에서 계속 작동하지만 더 이상 사용되지 않으며 향후 언제든지 제거될 수 있습니다.


Christian Hayter

정보 스키마 시스템 뷰를 사용하여 관심 있는 테이블에 대한 거의 모든 것을 찾을 수 있습니다.

 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'yourTableName' ORDER BY ORDINAL_POSITION

Information_schema 보기를 사용하여 보기, 저장 프로시저 및 데이터베이스에 대한 거의 모든 것을 조사할 수도 있습니다.


Community Wiki

다음과 같이 시도해 보세요.

 CREATE FUNCTION ColumnExists(@TableName varchar(100), @ColumnName varchar(100)) RETURNS varchar(1) AS BEGIN DECLARE @Result varchar(1); IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = @TableName AND COLUMN_NAME = @ColumnName) BEGIN SET @Result = 'T' END ELSE BEGIN SET @Result = 'F' END RETURN @Result; END GO GRANT EXECUTE ON [ColumnExists] TO [whoever] GO

그런 다음 다음과 같이 사용하십시오.

 IF ColumnExists('xxx', 'yyyy') = 'F' BEGIN ALTER TABLE xxx ADD yyyyy varChar(10) NOT NULL END GO

SQL Server 2000 및 SQL Server 2005 모두에서 작동해야 합니다. SQL Server 2008은 확실하지 않지만 이유는 알 수 없습니다.


Matt Lacey

먼저 table / column ( id / name ) 조합이 dbo.syscolumns (필드 정의가 포함된 내부 SQL Server 테이블)에 있는지 확인하고, 그렇지 않은 경우 적절한 ALTER TABLE 쿼리를 실행하여 추가합니다. 예를 들어:

 IF NOT EXISTS ( SELECT * FROM syscolumns WHERE id = OBJECT_ID('Client') AND name = 'Name' ) ALTER TABLE Client ADD Name VARCHAR(64) NULL

mdb

제 좋은 친구이자 동료가 SQL SERVER 2005+에서 SQL OBJECT_IDCOLUMNPROPERTY 와 함께 IF 다음과 유사한 것을 사용할 수 있습니다.

여기에서 직접 볼 수 있습니다

 IF (OBJECT_ID(N'[dbo].[myTable]') IS NOT NULL AND COLUMNPROPERTY( OBJECT_ID(N'[dbo].[myTable]'), 'ThisColumnDoesNotExist', 'ColumnId') IS NULL) BEGIN SELECT 'Column does not exist -- You can add TSQL to add the column here' END

brazilianldsjaguar

declare @myColumn as nvarchar(128) set @myColumn = 'myColumn' if not exists ( select 1 from information_schema.columns columns where columns.table_catalog = 'myDatabase' and columns.table_schema = 'mySchema' and columns.table_name = 'myTable' and columns.column_name = @myColumn ) begin exec('alter table myDatabase.mySchema.myTable add' +' ['+@myColumn+'] bigint null') end

Tuomo Kämäräinen

이것은 SQL 2000에서 저에게 효과적이었습니다.

 IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'table_name' AND column_name = 'column_name' ) BEGIN ... END

Joe M

이 시도

 SELECT COLUMNS.* FROM INFORMATION_SCHEMA.COLUMNS COLUMNS, INFORMATION_SCHEMA.TABLES TABLES WHERE COLUMNS.TABLE_NAME = TABLES.TABLE_NAME AND Upper(COLUMNS.COLUMN_NAME) = Upper('column_name')

Douglas Tondo

나는 SQL SERVER 2000과 비슷한 것이 필요했고 @Mitch가 지적했듯이 이것은 inm 2005+에서만 작동합니다.

그것이 다른 사람에게 도움이된다면 이것이 결국 나를 위해 일한 것입니다.

 if exists ( select * from sysobjects, syscolumns where sysobjects.id = syscolumns.id and sysobjects.name = 'table' and syscolumns.name = 'column')

FrostbiteXIII

if exists ( select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '<table_name>' and COLUMN_NAME = '<column_name>' ) begin print 'Column you have specified exists' end else begin print 'Column does not exist' end

BYRAKUR SURESH BABU

IF NOT EXISTS( SELECT NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'TableName' AND table_schema = 'SchemaName' AND column_name = 'ColumnName') BEGIN ALTER TABLE [SchemaName].[TableName] ADD [ColumnName] int(1) NOT NULL default '0'; END;

Na30m

허용되는 답변 의 임시 테이블 버전:

 if (exists(select 1 from tempdb.sys.columns where Name = 'columnName' and Object_ID = object_id('tempdb..#tableName'))) begin ... end

crokusek

select distinct object_name(sc.id) from syscolumns sc,sysobjects so where sc.name like '%col_name%' and so.type='U'

Nishad

Wheat의 대답은 좋지만 스키마나 데이터베이스에 동일한 테이블 이름/열 이름 쌍이 없다고 가정합니다. 그 조건에 대해 안전하게 만들려면 이것을 사용하십시오 ...

 select * from Information_Schema.Columns where Table_Catalog = 'DatabaseName' and Table_Schema = 'SchemaName' and Table_Name = 'TableName' and Column_Name = 'ColumnName'

Daniel Barbalace

열의 존재를 확인하는 방법에는 여러 가지가 있습니다. INFORMATION_SCHEMA.COLUMNS 는 사용자와 통신하기 위해 생성되므로 사용하는 것이 좋습니다. 다음 표를 고려하십시오.

 sys.objects sys.columns

system catalog. 를 확인하는 데 사용할 수 있는 다른 액세스 방법도 있습니다.

SELECT * 를 사용할 필요가 없으며 NULL value 테스트하기만 하면 됩니다.

 IF EXISTS( SELECT NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'myTableName' AND COLUMN_NAME = 'myColumnName' )

Ali Elmi

가장 간단하고 이해하기 쉬운 솔루션 중 하나는 다음과 같습니다.

 IF COL_LENGTH('Table_Name','Column_Name') IS NULL BEGIN -- Column Not Exists, implement your logic END ELSE BEGIN -- Column Exists, implement your logic END

Arsman Ahmad

다음은 데이터베이스의 열 추가를 관리하는 데 사용하는 간단한 스크립트입니다.

 IF NOT EXISTS ( SELECT * FROM sys.Columns WHERE Name = N'QbId' AND Object_Id = Object_Id(N'Driver') ) BEGIN ALTER TABLE Driver ADD QbId NVARCHAR(20) NULL END ELSE BEGIN PRINT 'QbId is already added on Driver' END

이 예에서 Name 은 추가 ColumnName Object_IdTableName


UJS

열이 없으면 다음을 수행하십시오.

 BEGIN IF (COL_LENGTH('[dbo].[Table]', 'Column ') IS NULL) BEGIN //Do something END END;

열이 존재하는 경우 다음을 수행하십시오.

 BEGIN IF (COL_LENGTH('[dbo].[Table]', 'Column ') IS NOT NULL) BEGIN //Do something END END;

Jagjit Singh

아래 쿼리를 사용하여 테이블에 검색된 컬럼이 존재하는지 확인할 수 있습니다. 아래와 같이 검색된 결과를 바탕으로 결정을 내릴 수도 있습니다.

 IF EXISTS (SELECT 'Y' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = <YourTableName> AND COLUMN_NAME = <YourColumnName>) BEGIN SELECT 'Column Already Exists.' END ELSE BEGIN ALTER TABLE <YourTableName> ADD <YourColumnName> <DataType>[Size] END

Suraj Kumar

//Only checks IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG = 'Database_Name' and TABLE_SCHEMA = 'Schema_Name' and TABLE_NAME = 'Table_Name' and COLUMN_NAME = 'Column_Name' and DATA_TYPE = 'Column_Type') -- Where statement lines can be deleted. BEGIN --COLUMN EXISTS IN TABLE END ELSE BEGIN --COLUMN DOES NOT EXISTS IN TABLE END

comfortchambeshi

또 다른 변형...

 SELECT Count(*) AS existFlag FROM sys.columns WHERE [name] = N 'ColumnName' AND [object_id] = OBJECT_ID(N 'TableName')

Manuel Alves

또 다른 기여는 존재하지 않는 경우 열을 추가하는 다음 샘플입니다.

 USE [Northwind] GO IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Categories' AND COLUMN_NAME = 'Note') BEGIN ALTER TABLE Categories ADD Note NVARCHAR(800) NULL END GO

도움이 되기를 바랍니다. 시몬


Simone Spagna

table -->script table as -->new windows - 디자인 스크립트가 있습니다. 새 창에서 열 이름 확인 및 찾기


arnav

아래 쿼리를 실행하여 주어진 테이블에 열이 있는지 확인합니다.

 IF(SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'TableName' AND COLUMN_NAME = 'ColumnName') IS NOT NULL PRINT 'Column Exists in the given table';

S Krishna

IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG = 'Database Name' and TABLE_SCHEMA = 'Schema Name' and TABLE_NAME = 'Table Name' and COLUMN_NAME = 'Column Name' and DATA_TYPE = 'Column Type') -- Where statement lines can be deleted. BEGIN --COLUMN EXISTS IN TABLE END ELSE BEGIN --COLUMN DOES NOT EXISTS IN TABLE END

Mohamad Reza Shahrestani

출처 : http:www.stackoverflow.com/questions/133031/how-to-check-if-a-column-exists-in-a-sql-server-table

반응형