相关疑难解决方法(0)

SQL Server:如何使服务器检查其所有检查约束?

看起来Enterprise Manager*生成的一些脚本(或者没有,它们无关紧要)创建了检查约束WITH NOCHECK.

现在,当任何人修改表时,SQL Server都会遇到失败的检查约束,并抛出错误.

我可以让SQL通过它的所有检查约束,并检查它们吗?

运行:

sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Run Code Online (Sandbox Code Playgroud)

只启用以前禁用的检查约束,它实际上不会检查它们.

脚注

*SQL Server 2000

sql-server sql-server-2000 database-integrity check-constraints sp-msforeachtable

25
推荐指数
2
解决办法
2万
查看次数

更新时出现Sql错误:UPDATE语句与FOREIGN KEY约束冲突

我有一个名为table的表patient_address,它在patient表中引用了一个PK键.但是,如果我尝试运行以下语句之一:

update patient set id_no='7008255601088' where id_no='8008255601088'
update patient_address set id_no='7008255601088' where id_no='8008255601088'
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

"UPDATE语句与REFERENCE约束冲突"FK__patient_a__id_no__27C3E46E".冲突发生在数据库"PMS",表"dbo.patient_address",列'id_no'." 或"UPDATE语句与FOREIGN KEY约束冲突"FK__patient_a__id_no__27C3E46E".冲突发生在数据库"PMS",表"dbo.patient",列'id_no'." .

有没有人知道可能的原因?谢谢.

sql-server

22
推荐指数
3
解决办法
7万
查看次数

包括但不能删除SQL架构比较

我试图在Visual Studio 2013/15中使用SQL模式比较,并且遇到了从删除表中删除表的问题,使它们完全无法处理.

问题是它试图删除的表是客户制造的表,所以当我们将我们的版本与他们的数据库同步时,它要求删除它们.我们不想删除它们,但是它们的一些表对我们的表有约束,因此当它尝试CCDR时由于表约束而失败.有没有办法添加表(重新创建?像其他人一样?),而不是为每个客户端编写脚本来执行SQL Schema Compare已经为这几个表做的事情?

Red-Gate的SQL Compare以某种方式做到这一点,但它对我们隐藏,所以不太确定它是如何实现的.删除不删除,但脚本上也没有错误.

更新:

"删除不在源中的约束"选项似乎无法正常工作.它确实会丢掉一些,但是还有一些它不会放弃约束.在red-gate的工具中,当我们比较时,我发现了如何从中获取SQL,而他们的产品并没有说表需要根据需要进行更新,而Visual Studio则可以.它们似乎工作几乎相同,但失败的表是根本不应更新的表(见下文)

更新2:

我发现的另一个问题是"忽略列排序规则"也不能正常工作,因为这不应该被越来越下降被告知,他们需要的,即使它只是一个列变化,而不是实际的列或数据才能被更新的表变化,这使得这更像是一个错误报告而不是任何东西.

忽略列校对

仍然显示列整理

sql visual-studio schema-compare

17
推荐指数
1
解决办法
1238
查看次数

如何在Sql Server 2000中删除表上的所有外键约束?

如何使用T-SQL删除SQL Server 2000中的表上的所有外键约束?

sql t-sql sql-server

15
推荐指数
3
解决办法
3万
查看次数

重新编号主键

如何重置sql表上的主键计数器并使用新的主键更新每一行?

sql primary-key

8
推荐指数
2
解决办法
1万
查看次数

禁用表上的外键约束?

我可以暂时禁用外键约束.我该怎么做呢?

sql sql-server sql-server-2005

6
推荐指数
1
解决办法
2万
查看次数

如何在没有 ON DELETE CASCADE 的情况下进行 DELETE(冲突 REFERENCE 约束)

我有一个巨大的遗留数据库,其中一个表有多个外键指向另一个表,并且看不到一个级联,类似于下面的示例表:

create table Users (
    Id int primary key identity,
    Name varchar(max)
)

create table Products (
    Id int primary key identity,
    Name varchar(max),
    CreatedBy int foreign key references Users(Id),
    UpdatedBy int foreign key references Users(Id)
)

insert into Users values('Bar')
insert into Users values('Baz')
insert into Products values('Foo', 1, 2)
Run Code Online (Sandbox Code Playgroud)

我需要能够删除一些旧数据,但它当然会引发引用异常:

delete from Users where Name='Bar'
Run Code Online (Sandbox Code Playgroud)

DELETE 语句与 REFERENCE 约束“FK__Products__Create__1AD3FDA4”冲突。冲突发生在数据库“Foo”、表“dbo.Products”、“CreatedBy”列中。


由于数据库的绝对复杂性,我无法预先删除所有引用,因此我尝试通过级联设置以编程方式添加临时外键以解决它们。但是,对于这个具有多个指向另一个表的外键的特定表,这会导致cycles or multiple cascade paths第二个UpdatedBy更改:

alter table Products add foreign key (CreatedBy) references Users(Id) on …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server cascading-deletes

4
推荐指数
1
解决办法
2万
查看次数

在关系数据库中是否可以使用循环外键依赖项?

我正在编写一个代码来将MySQL数据库备份到二进制文件中.我知道mysqldump但由于某些原因我不能使用琐碎的方法.我目前在做什么:

  1. 读取模式定义
  2. 按外键依赖关系排序表
  3. 选择所有表中的行(每次100行)并将它们写入二进制文件中

依赖关系的定义:当且仅当指向密钥时至少有一个外键时,表T1依赖于表的存在.T2T1T2

为每个表分配一个数值.此值指定表的顺序.对于没有依赖关系的表,此值0对于其他表来说是当前表依赖于它们的表的最大值; 加一.如果-1依赖表的值集合中有一个,则当前表的值仍为undefined(-1).最初所有表的值都是-1未指定的.

这是C++代码:

// tablesQueue: Queue of all tables
// orderedQueue: Resulting order

while(! tablesQueue.isEmpty())
{
    bool satisfied = true;
    foreach(TableNode* parent, tablesQueue.head()->referencedTables)
    {
        if(parent->degreeOfFreedom == -1)
        {
            satisfied = false;
            break;
        }
        else
           // handle error blah blah ... 
    }
    if(satisfied)
    {
        int max =0;
        foreach(TableNode* parent, tablesQueue.head()->referencedTables)
        max = (max < parent->degreeOfFreedom+1) ? 
                  parent->degreeOfFreedom+1 : max;
        tablesQueue.head()->degreeOfFreedom = …
Run Code Online (Sandbox Code Playgroud)

database-design foreign-keys directed-acyclic-graphs

4
推荐指数
1
解决办法
2077
查看次数

如何关闭/打开Microsoft SQL Server中的所有外键和触发器?

插入和修改大量数据可能需要它.

说实话,我在输入问题时已经知道了答案.但是我找到它真的很难,所以我想,这个答案对其他人来说会有所帮助.

但如果你知道更好的方法,你可以自由回答.

所有外键开关

来源:http://www.nxtbook.com/nxtbooks/cmp/msdnmag0407/index.php?startid = 27

__PRE__

所有触发开关

来源:http://www.nxtbook.com/nxtbooks/cmp/msdnmag0407/index.php?startid = 28

__PRE__

sql sql-server

2
推荐指数
1
解决办法
4194
查看次数