当前位置: 首页 > 面试题库 >

SQL Server 2008脚本删除具有系统生成名称的PK约束

章承
2023-03-14
问题内容

我试图将聚簇索引添加到SQL Server 2008中的现有表中,并且它必须是自动脚本,因为该表存在于跨多个服务器的多个数据库中。

为了添加聚簇索引,我需要删除表上的PK约束,然后将其重新添加为未聚簇的。问题是PK约束的名称是自动生成的,并且在末尾附加了GUID,因此就像“ PK_
[Table] _D9F9203400”。

所有数据库的名称都不相同,我不确定如何编写自动脚本以将PK约束放置在我不知道约束名称的表上。任何帮助表示赞赏!

更新:

下面的答案是我用的。完整脚本:

Declare @Val varchar(100)
Declare @Cmd varchar(1000)

Set @Val = (
    select name
    from sysobjects
    where xtype = 'PK'
    and parent_obj = (object_id('[Schema].[Table]'))
)
Set @Cmd = 'ALTER TABLE [Table] DROP CONSTRAINT ' + @Val
Exec (@Cmd)
GO

ALTER TABLE [Table] ADD CONSTRAINT PK_Table
    PRIMARY KEY NONCLUSTERED (TableId)
GO

CREATE UNIQUE CLUSTERED INDEX IX_Table_Column
    ON Table (Column)
GO

问题答案:

您可以查找约束的名称,并编写一些动态SQL来处理删除。

SELECT name 
    FROM sys.key_constraints 
    WHERE parent_object_id = object_id('YourSchemaName.YourTableName')
        AND type = 'PK';


 类似资料:
  • hibernate如何生成外键约束名称? 如果我不定义一个名字,Hibernate会生成这样的东西 这个名字是如何产生的?可能是从字段名散列或类似的内容?我需要知道名称是否在所有实例上都相等。

  • 问题内容: 我创建了一些没有显式名称的外键。 然后我发现SQL生成了疯狂的名称,例如。猜猜它们将在不同的服务器上以不同的名称生成。 是否有任何不错的功能来删除未命名的FK约束,这些表和字段作为参数传递? 问题答案: 没有内置的过程可以完成此操作,但是您可以使用information_schema视图中的信息来构建自己的过程。 基于表的示例

  • 抱歉,如果我问的是新手问题,但名称空间对我来说真的很费解。 我试图从一个XML/XSLT生成多个SVG文档。 我的样式表: 这样做会产生以下输出: 但我希望能够根据计算的内容指定高度和宽度属性 我尝试将“ ”创建为 http://www.w3.org/2000/svg 这将失败,因为它(xmlspy)不允许我分配xmlns属性。 如果不在根(svg)上指定名称空间,则xmlns将自动添加到根 节点

  • 我有这样布局的模型: 这里的场景是我永远不希望用户删除数据。相反,删除只会隐藏记录。但是,我仍然希望所有非软删除的记录都遵循唯一的键约束。基本上,我希望有尽可能多的重复的已删除记录,但只有一个唯一的未删除记录可以存在。所以我本来想包括“已删除”字段(由django安全删除库提供),但问题是Django的唯一检查因“psycopg2”而失败。完整性错误:重复的键值违反了 ['field2', 'fi

  • 问题内容: hibernate如何生成外键约束名称? 如果我没有定义名称,hibernate将生成类似这样的内容 这个名字是怎么产生的?也许来自字段名称的哈希值或类似的东西?我需要知道所有实例上的名称是否相等。 问题答案: Hibernate通过串联表和属性名称来生成约束名称,并将结果转换为。由于某些数据库中的约束名称长度限制,因此需要它。例如,在Oracle数据库中,外键名称的长度不能超过30个

  • 问题内容: 如何删除名称为特定的Cookie ? 不应以下内容: 然后: 杀死饼干? 问题答案: 您应该定义cookie所在的路径,以确保删除正确的cookie。 如果未指定路径,浏览器将相对于您当前所在的页面设置一个cookie,因此,如果您在其他页面上删除该cookie时,另一个cookie继续存在。 根据@Evan Morrison的评论进行编辑。 请注意,在某些情况下,要标识正确的cook