[sql-server] 테이블에 열이 없으면 추가하십시오.

테이블에 열을 추가하는 MS SQL Server에 대한 쿼리를 작성하고 싶습니다. 그러나 다음 쿼리를 실행 / 실행할 때 오류 표시를 원하지 않습니다.

이 종류의 쿼리를 사용하여 테이블을 추가하고 있습니다 …

IF EXISTS (
       SELECT *
       FROM   sys.objects
       WHERE  OBJECT_ID = OBJECT_ID(N'[dbo].[Person]')
              AND TYPE IN (N'U')
   )

그러나 열에 대한이 쿼리를 작성하는 방법을 모르겠습니다.



답변

sys.columnsio 테이블을 사용하여 유사한 구성을 사용할 수 있습니다 sys.objects.

IF NOT EXISTS (
  SELECT *
  FROM   sys.columns
  WHERE  object_id = OBJECT_ID(N'[dbo].[Person]')
         AND name = 'ColumnName'
)


답변

IF COL_LENGTH('table_name', 'column_name') IS NULL
BEGIN
    ALTER TABLE table_name
    ADD [column_name] INT
END


답변

다른 대안. 나는 쓰기가 적기 때문에이 접근법을 선호하지만 두 가지가 같은 것을 성취합니다.

IF COLUMNPROPERTY(OBJECT_ID('dbo.Person'), 'ColumnName', 'ColumnId') IS NULL
BEGIN
    ALTER TABLE Person
    ADD ColumnName VARCHAR(MAX) NOT NULL
END

나는 또한 당신이 테이블이 존재하는 곳을 찾고 있다는 것을 분명히 알았습니다.

 if COLUMNPROPERTY( OBJECT_ID('dbo.Person'),'ColumnName','ColumnId') is not null


답변

나를 위해 일한 또 다른 변형이 있습니다.

IF NOT EXISTS (SELECT 1
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE upper(TABLE_NAME) = 'TABLENAME'
        AND upper(COLUMN_NAME) = 'COLUMNNAME')
BEGIN
    ALTER TABLE [dbo].[Person] ADD Column
END
GO

편집 : INFORMATION_SCHEMA보기가 항상 업데이트되는 것은 아닙니다 SYS.COLUMNS. 대신 사용하십시오.

IF NOT EXISTS (SELECT 1
FROM SYS.COLUMNS....


답변

IF NOT EXISTS (SELECT * FROM syscolumns
  WHERE ID=OBJECT_ID('[db].[Employee]') AND NAME='EmpName')
  ALTER TABLE [db].[Employee]
  ADD [EmpName] VARCHAR(10)
GO

이것이 도움이되기를 바랍니다. 더 많은 정보


답변

다른 데이터베이스에서 열을 확인할 때 간단히 데이터베이스 이름을 포함시킬 수 있습니다.

IF NOT EXISTS (
  SELECT *
  FROM   DatabaseName.sys.columns
  WHERE  object_id = OBJECT_ID(N'[DatabaseName].[dbo].[TableName]')
         AND name = 'ColumnName'
)


답변

IF NOT EXISTS (SELECT 1  FROM SYS.COLUMNS WHERE
OBJECT_ID = OBJECT_ID(N'[dbo].[Person]') AND name = 'DateOfBirth')
BEGIN
ALTER TABLE [dbo].[Person] ADD DateOfBirth DATETIME
END