Tav*_*usi 169 sql-server add not-exists
我想为MS SQL Server编写一个查询,将列添加到表中.但是当我运行/执行以下查询时,我不希望显示任何错误.
我正在使用这种查询来添加表格...
IF EXISTS (
SELECT *
FROM sys.objects
WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Person]')
AND TYPE IN (N'U')
)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何为列编写此查询.
Lie*_*ers 199
您可以使用sys.columns表io 使用类似的构造sys.objects.
IF NOT EXISTS (
SELECT *
FROM sys.columns
WHERE object_id = OBJECT_ID(N'[dbo].[Person]')
AND name = 'ColumnName'
)
Run Code Online (Sandbox Code Playgroud)
小智 78
IF COL_LENGTH('table_name', 'column_name') IS NULL
BEGIN
ALTER TABLE table_name
ADD [column_name] INT
END
Run Code Online (Sandbox Code Playgroud)
JSt*_*ead 31
另一种选择.我更喜欢这种方法,因为写作较少,但两者完成同样的事情.
IF COLUMNPROPERTY(OBJECT_ID('dbo.Person'), 'ColumnName', 'ColumnId') IS NULL
BEGIN
ALTER TABLE Person
ADD ColumnName VARCHAR(MAX) NOT NULL
END
Run Code Online (Sandbox Code Playgroud)
我也注意到你的是在寻找表存在的地方,显然就是这个
if COLUMNPROPERTY( OBJECT_ID('dbo.Person'),'ColumnName','ColumnId') is not null
Run Code Online (Sandbox Code Playgroud)
IF NOT EXISTS (SELECT * FROM syscolumns
WHERE ID=OBJECT_ID('[db].[Employee]') AND NAME='EmpName')
ALTER TABLE [db].[Employee]
ADD [EmpName] VARCHAR(10)
GO
Run Code Online (Sandbox Code Playgroud)
我希望这会有所帮助。更多信息
这是另一个对我有用的变体。
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
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,
INFORMATION_SCHEMA视图可能并不总是更新,SYS.COLUMNS而是使用:
IF NOT EXISTS (SELECT 1
FROM SYS.COLUMNS....
| 归档时间: |
|
| 查看次数: |
210914 次 |
| 最近记录: |