0

我需要在工作中编写表格修改脚本。他们不想做一个简单的“如果存在则删除并创建”,而是希望它检查我正在添加的新列,然后只有在它们不存在时才用它们更改表。

有人可以帮我写剧本吗?假设一个简单的表目前看起来像这样:

CREATE TABLE myTable (

[ID] [int] NOT NULL,
[FirstName] [varchar] (20) NOT NULL,
[LastName] [varchar] (20) NOT NULL

)

..我想添加一个Address字段,比如说 varchar(50),但前提是它不存在于模式中。

4

4 回答 4

4
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'myTable' AND COLUMN_NAME = 'Address')
BEGIN

    ALTER TABLE [dbo].[myTable] ADD 
        [Address] varchar(50) NOT NULL 
END
于 2013-07-26T15:27:13.367 回答
1
IF 'col_name' 
NOT IN 
   SELECT Name
   FROM table_name.columns 
ALTER TABLE table_name 
ADD 'col_name' VARCHAR(65) NOT NULL

像这样的东西?

编辑:我的朋友认为这要好得多

IF NOT EXISTS 
   (SELECT Name
    FROM table_name.columns
    Where Name='target_column_name')
ALTER TABLE table_name
ADD 'target_column_name' VARCHAR(65) NOTNULL
于 2013-07-26T15:28:56.960 回答
1

尝试这个:

在这里使用它,您可以检查多个列并更改表格...

DECLARE @query VARCHAR(MAX)

IF EXISTS(SELECT * FROM sys.columns
WHERE Name = N'Address' AND OBJECT_ID = OBJECT_ID(N'<TableName>'))
BEGIN
SET   
    @query = 'ALTER TABLE <TableName> ADD Address varchar(50) GO'
END 

--You can give multiple If conditions, example:
--IF EXISTS(SELECT * FROM sys.columns
--WHERE Name = N'<SomeOtherColumn>' AND OBJECT_ID = OBJECT_ID(N'<TableName>'))
--BEGIN
--SET   
    --@query = @query + 'ALTER TABLE <TableName> ADD <SomeOtherColumn> varchar(50) GO'
--END 

EXEC sp_Executesql @query
于 2013-07-26T15:29:07.490 回答
1

尝试这个

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[myTable ]') AND type in (N'U'))
BEGIN
 DROP TABLE [dbo].[myTable ]
END

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE myTable (

[ID] [int] NOT NULL,
[FirstName] [varchar] (20) NOT NULL,
[LastName] [varchar] (20) NOT NULL,
[Address] [varchar] (50) NOT NULL
)

或者

if not exists(select * from sys.columns 
            where Name = N'Address' and Object_ID = Object_ID(N'myTable'))    
begin
    alter table myTable
    add Address varchar(50) NOT NULL
end
GO
于 2013-07-26T15:24:19.750 回答