在SQL Server中添加表列之前检查表列
我需要在工作中编写一个表修改脚本。他们不想做一个简单的if exists-then-drop-and-create,而是想让它检查我添加的新列,只有在它们不存在时才用它们修改表 有人能帮我写剧本吗?假设一个简单的表当前看起来如下所示:在SQL Server中添加表列之前检查表列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要在工作中编写一个表修改脚本。他们不想做一个简单的if exists-then-drop-and-create,而是想让它检查我添加的新列,只有在它们不存在时才用它们修改表 有人能帮我写剧本吗?假设一个简单的表当前看起来如下所示: CREATE TABLE myTable ( [ID] [int] NOT NULL, [FirstName] [varchar] (20) NOT NULL, [LastName] [varchar] (20) NOT NULL ) 。。我想添加一个地址字
CREATE TABLE myTable (
[ID] [int] NOT NULL,
[FirstName] [varchar] (20) NOT NULL,
[LastName] [varchar] (20) NOT NULL
)
。。我想添加一个地址字段,比如说varchar50,但前提是它在模式中还不存在 试试这个
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 Name
FROM table_name.columns
Where Name='target_column_name')
ALTER TABLE table_name
ADD 'target_column_name' VARCHAR(65) NOTNULL
试试这个:
在这里使用它,您可以检查多个列并更改表
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
OP不想丢掉桌子。如果该列不存在,只需添加该列即可
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
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