我需要删除并重建SQL Server中临时表中的主键。最常见的解决方案要求您输入PK索引的名称。但是,由于这是在存储过程中,这样做会限制此sp的任何并行使用。
CREATE TABLE #mytable (Date_ DATETIME NOT NULL, Name_ CHAR(50) NOT NULL, VALUE_ INT )
ALTER TABLE #mytable ADD PRIMARY KEY CLUSTERED (Date_, Name_)
现在我需要删除这个主键,并在Name_列上创建一个新主键。
例如,
ALTER TABLE #mytable DROP OLD PK
ALTER TABLE #mytable ADD PRIMARY KEY CLUSTERED (Name_)
答案 0 :(得分:1)
动态SQL和NEWID()
将为您提供一个唯一的标识符,您可以将其附加到PK的名称。
DECLARE @GUID VARCHAR(50)
SELECT @GUID = REPLACE(NEWID(), '-', '')
PRINT @GUID
CREATE TABLE #mytable (Date_ DATETIME NOT NULL, Name_ CHAR(50) NOT NULL, VALUE_ INT )
EXEC('ALTER TABLE #mytable ADD CONSTRAINT PK_'+@GUID+' PRIMARY KEY CLUSTERED (Date_, Name_)')
EXEC('ALTER TABLE #mytable DROP CONSTRAINT PK_'+@GUID)
ALTER TABLE #mytable ADD PRIMARY KEY CLUSTERED (Name_)
DROP TABLE #MyTable