reg*_*gie 155
通用:
ALTER TABLE table_name DROP COLUMN column_name;
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
ALTER TABLE MEN DROP COLUMN Lname;
Run Code Online (Sandbox Code Playgroud)
Aar*_*ier 47
这是正确的答案:
ALTER TABLE MEN DROP COLUMN Lname
Run Code Online (Sandbox Code Playgroud)
但是......如果CONSTRAINT上存在COLUMN,那么你必须DROP在CONSTRAINT第一,那么你就可以DROP在COLUMN.为了删除a CONSTRAINT,运行:
ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}
Run Code Online (Sandbox Code Playgroud)
Pரத*_*ீப் 21
在SQL Server 2016中,您可以使用新的DIE语句.
ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name
Run Code Online (Sandbox Code Playgroud)
上面的查询drops只能在列中重新运行它,exists否则它不会抛出错误.
而不是使用大IF包装器来检查column丢弃它之前的存在,你可以运行上面的DDL语句
小智 7
问题是,你能否只从一张未存在的表中删除一列;-)
BEGIN TRANSACTION
IF exists (SELECT * FROM sys.columns c
INNER JOIN sys.objects t ON (c.[object_id] = t.[object_id])
WHERE t.[object_id] = OBJECT_ID(N'[dbo].[MyTable]')
AND c.[name] = 'ColumnName')
BEGIN TRY
ALTER TABLE [dbo].[MyTable] DROP COLUMN ColumnName
END TRY
BEGIN CATCH
print 'FAILED!'
END CATCH
ELSE
BEGIN
SELECT ERROR_NUMBER() AS ErrorNumber;
print 'NO TABLE OR COLUMN FOUND !'
END
COMMIT
Run Code Online (Sandbox Code Playgroud)
一个简单的答案就是使用这个:
ALTER TABLE MEN DROP COLUMN Lname;
Run Code Online (Sandbox Code Playgroud)
可以这样指定多个列:
ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;
Run Code Online (Sandbox Code Playgroud)
从SQL Server 2016中,也可以仅删除该列(如果存在)。当该列不存在时,这会阻止您收到错误消息,而这可能是您不关心的。
ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;
Run Code Online (Sandbox Code Playgroud)
删除列有一些先决条件。删除的列不能是:
如果以上任何一项为真,则需要先删除那些关联。
另外,应该注意的是,在重建表的聚集索引之前,删除列不会从硬盘上回收空间。因此,通常遵循以下这样的表重建命令是一个好主意:
ALTER TABLE MEN REBUILD;
Run Code Online (Sandbox Code Playgroud)
最后,正如某些人所说的那样,这可能很慢,并且可能会在持续时间内锁定表。可以创建具有所需结构的新表,然后像这样重命名:
SELECT
Fname
-- Note LName the column not wanted is not selected
INTO
new_MEN
FROM
MEN;
EXEC sp_rename 'MEN', 'old_MEN';
EXEC sp_rename 'new_MEN', 'MEN';
DROP TABLE old_MEN;
Run Code Online (Sandbox Code Playgroud)
但是请注意,在第一个选择命令和最后一个重命名命令之间,这里有一个窗口会丢失插入行的数据。
| 归档时间: |
|
| 查看次数: |
608748 次 |
| 最近记录: |