【发布时间】:2010-11-18 08:38:33
【问题描述】:
在使用 SQL(MS SQL Server 2005 变体)重命名表列时,最佳做法是什么?这假定列中有必须保留的数据。
【问题讨论】:
标签: sql sql-server ddl renaming
在使用 SQL(MS SQL Server 2005 变体)重命名表列时,最佳做法是什么?这假定列中有必须保留的数据。
【问题讨论】:
标签: sql sql-server ddl renaming
您必须使用存储过程来重命名列。以下内容会将您的列从“oldColumnName”重命名为“newColumnName”,而不会影响任何数据。
EXEC sp_rename 'tableName.[oldColumnName]', 'newColumnName', 'COLUMN'
显然,您必须手动更新使用旧名称的任何代码/存储过程/SQL。
【讨论】:
我今天遇到了同样的问题,解决方法是杀死数据库上的所有进程,因为进程被锁定了事务。我执行了程序 sp_rename,但问题没有解决。所以我杀死了数据库中的进程并且 proc 工作。
USE MASTER
GO
--Kill all the connections opened in database.
DECLARE @dbname sysname
SET @dbname = 'database_name'
DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END
SELECT request_session_id
FROM sys.dm_tran_locks
WHERE resource_database_id = DB_ID('database_name')
【讨论】: