특정 열이 없으면 추가해야 합니다. 다음과 같은 것이 있지만 항상 false를 반환합니다.
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'myTableName' AND COLUMN_NAME = 'myColumnName')
SQL Server 데이터베이스의 테이블에 열이 있는지 어떻게 확인할 수 있습니까?
질문자 :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
더 간결한 버전
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
특정 요구 사항에 맞게 아래를 조정하십시오.
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를 쿼리하고 있습니까? 두 문 중 테이블/열 이름에 오타가 있습니까?
이 시도...
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
컬럼을 삭제하기 전에 컬럼의 존재를 확인하는 사람들을 위해.
SQL Server 2016 부터 IF
래퍼 대신 새로운 DIE 문을 사용할 수 있습니다.
ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name
Microsoft는 버전 간에 시스템 테이블을 유지한다고 보장하지 않기 때문에 시스템 테이블보다 INFORMATION_SCHEMA.COLUMNS
를 선호합니다. 예를 들어 dbo.syscolumns
는 SQL 2008에서 계속 작동하지만 더 이상 사용되지 않으며 향후 언제든지 제거될 수 있습니다.
정보 스키마 시스템 뷰를 사용하여 관심 있는 테이블에 대한 거의 모든 것을 찾을 수 있습니다.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'yourTableName' ORDER BY ORDINAL_POSITION
Information_schema 보기를 사용하여 보기, 저장 프로시저 및 데이터베이스에 대한 거의 모든 것을 조사할 수도 있습니다.
다음과 같이 시도해 보세요.
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은 확실하지 않지만 이유는 알 수 없습니다.
먼저 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
제 좋은 친구이자 동료가 SQL SERVER 2005+에서 SQL OBJECT_ID
및 COLUMNPROPERTY
와 함께 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
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
이것은 SQL 2000에서 저에게 효과적이었습니다.
IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'table_name' AND column_name = 'column_name' ) BEGIN ... END
이 시도
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')
나는 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')
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
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;
허용되는 답변 의 임시 테이블 버전:
if (exists(select 1 from tempdb.sys.columns where Name = 'columnName' and Object_ID = object_id('tempdb..#tableName'))) begin ... end
select distinct object_name(sc.id) from syscolumns sc,sysobjects so where sc.name like '%col_name%' and so.type='U'
Wheat의 대답은 좋지만 스키마나 데이터베이스에 동일한 테이블 이름/열 이름 쌍이 없다고 가정합니다. 그 조건에 대해 안전하게 만들려면 이것을 사용하십시오 ...
select * from Information_Schema.Columns where Table_Catalog = 'DatabaseName' and Table_Schema = 'SchemaName' and Table_Name = 'TableName' and Column_Name = 'ColumnName'
열의 존재를 확인하는 방법에는 여러 가지가 있습니다. 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' )
가장 간단하고 이해하기 쉬운 솔루션 중 하나는 다음과 같습니다.
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
다음은 데이터베이스의 열 추가를 관리하는 데 사용하는 간단한 스크립트입니다.
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_Id
는 TableName
열이 없으면 다음을 수행하십시오.
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;
아래 쿼리를 사용하여 테이블에 검색된 컬럼이 존재하는지 확인할 수 있습니다. 아래와 같이 검색된 결과를 바탕으로 결정을 내릴 수도 있습니다.
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
//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
또 다른 변형...
SELECT Count(*) AS existFlag FROM sys.columns WHERE [name] = N 'ColumnName' AND [object_id] = OBJECT_ID(N 'TableName')
또 다른 기여는 존재하지 않는 경우 열을 추가하는 다음 샘플입니다.
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
도움이 되기를 바랍니다. 시몬
table -->script table as -->new windows - 디자인 스크립트가 있습니다. 새 창에서 열 이름 확인 및 찾기
아래 쿼리를 실행하여 주어진 테이블에 열이 있는지 확인합니다.
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';
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
출처 : http:www.stackoverflow.com/questions/133031/how-to-check-if-a-column-exists-in-a-sql-server-table
Linux에서 실행되는 C++ 코드를 프로파일링하려면 어떻게 해야 합니까? (0) | 2021.12.08 |
---|---|
커밋을 푸시하기 위해 https 자격 증명을 캐시하는 방법이 있습니까? (0) | 2021.12.08 |
특정 문자열을 포함하는 모든 행을 텍스트 파일에서 삭제하는 방법은 무엇입니까? (0) | 2021.12.08 |
언제 '$this'보다 'self'를 사용해야 합니까? (0) | 2021.12.08 |
소수점 이하 두 자리로 부동 소수점 제한 (0) | 2021.12.08 |