Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不使用名称显式删除约束_Sql_Sql Server 2008_Tsql - Fatal编程技术网

Sql 不使用名称显式删除约束

Sql 不使用名称显式删除约束,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有一个脚本,它创建了一个带有默认值的表,但是我想删除这个约束。手动操作没有问题,因为我知道名称,但我希望在重新创建表后删除约束。所以我可以重新运行drop约束脚本。如何在不显式使用名称的情况下执行此操作?您可以尝试此操作-这将在系统目录视图中查找必要的信息,并创建一个“drop”T-SQL命令,您可以复制并执行该命令,以摆脱系统命名的默认约束: CREATE TABLE [dbo].[tmp_rg_xx_LBJ] ( [ROWVERSION] [bigint] NULL, [ROWDATE]

我有一个脚本,它创建了一个带有默认值的表,但是我想删除这个约束。手动操作没有问题,因为我知道名称,但我希望在重新创建表后删除约束。所以我可以重新运行drop约束脚本。如何在不显式使用名称的情况下执行此操作?

您可以尝试此操作-这将在系统目录视图中查找必要的信息,并创建一个“drop”T-SQL命令,您可以复制并执行该命令,以摆脱系统命名的默认约束:

CREATE TABLE [dbo].[tmp_rg_xx_LBJ]
(
[ROWVERSION] [bigint] NULL,
[ROWDATE] [datetime] NULL,
[SAPNO] [int] NOT NULL DEFAULT 1)


IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF__tmp_rg_xx__SAPNO__1B0907CE]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[LBJ] DROP CONSTRAINT [DF__tmp_rg_xx__SAPNO__1B0907CE]
END

GO
如果需要将其放入自己的脚本中,可以将
DropCmd
分配给变量,然后使用动态SQL执行该SQL语句:

SELECT
    DropCmd = 'ALTER TABLE ' + t.name + ' DROP CONSTRAINT ' + df.Name
FROM sys.default_constraints df
INNER JOIN sys.columns c ON df.parent_object_id = c.object_id AND df.parent_column_id = c.column_id
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE 
    t.Name = 'YourTableNameHere'
    AND c.name = 'YourColumnNameHere'

您可以尝试此操作-这将在系统目录视图中查找必要的信息,并创建一个“drop”T-SQL命令,您可以复制并执行该命令,以摆脱系统命名的默认约束:

CREATE TABLE [dbo].[tmp_rg_xx_LBJ]
(
[ROWVERSION] [bigint] NULL,
[ROWDATE] [datetime] NULL,
[SAPNO] [int] NOT NULL DEFAULT 1)


IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF__tmp_rg_xx__SAPNO__1B0907CE]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[LBJ] DROP CONSTRAINT [DF__tmp_rg_xx__SAPNO__1B0907CE]
END

GO
如果需要将其放入自己的脚本中,可以将
DropCmd
分配给变量,然后使用动态SQL执行该SQL语句:

SELECT
    DropCmd = 'ALTER TABLE ' + t.name + ' DROP CONSTRAINT ' + df.Name
FROM sys.default_constraints df
INNER JOIN sys.columns c ON df.parent_object_id = c.object_id AND df.parent_column_id = c.column_id
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE 
    t.Name = 'YourTableNameHere'
    AND c.name = 'YourColumnNameHere'

您可以像以前一样在
sys.objects
中查找约束,但是如果您要查找一个特定的约束,按名称引用它将是最好的方法。这就像询问如何在不实际使用表名的情况下查询表一样。它总是会启动DF_utmp_rg_xx_usapno我可以使用like吗?在创建约束时,您应该养成显式命名约束的习惯-这将使删除它们变得更容易!我知道,但我不得不多次重新创建表,而且删除是一个长脚本的一部分。我真的不想继续编辑脚本。你可以像以前那样在
sys.objects
中查找约束,但是如果你在查找一个特定的约束,按名称引用它将是最好的方法。这就像询问如何在不实际使用表名的情况下查询表一样。它总是会启动DF_utmp_rg_xx_usapno我可以使用like吗?在创建约束时,您应该养成显式命名约束的习惯-这将使删除它们变得更容易!我知道,但我不得不多次重新创建表,而且删除是一个长脚本的一部分。我真的不想一直编辑剧本。叫我thicky先生[SAPNO][int]NOT NULL约束“SAPNO”默认值1)现在我一直都知道Constaint的名称谢谢你的努力guys@icecurtain:将默认约束称为
DF_……
,这样您就可以将其与
SAPNO
的实际列名分开。我倾向于称它们为
DF(tablename)\uu(columnName)
——所以在你的例子中
DF\u tmp\u rg\u xx\u LBJ\u SAPNO
要清楚明确地告诉我thicky先生[SAPNO][int]NOT NULL约束“SAPNO”默认值1)现在我一直都知道Constaint的名称谢谢你的努力guys@icecurtain:将默认约束称为
DF_……
,这样您就可以将其与
SAPNO
的实际列名分开。我倾向于称它们为
DF(tablename)\uuu(columnName)
——所以在你的例子中
DF\u tmp\u rg\u xx\u LBJ\u SAPNO