相关疑难解决方法(0)

如何使用查询删除sql server中的非null约束

我试图在不丢失数据的情况下删除sql server 2008中的非空约束.

sql sql-server

108
推荐指数
1
解决办法
13万
查看次数

当我不知道约束的名称时,如何在Oracle中删除"not null"约束?

我有一个数据库,在字段上有一个NOT NULL约束,我想删除这个约束.复杂因素是此约束具有系统定义的名称,并且该约束的名称在生产服务器,集成服务器和各种开发人员数据库之间不同.我们当前的过程是检入更改脚本,并且自动化任务通过sqlplus对目标数据库执行适当的查询,因此我更喜欢可以直接发送到sqlplus的解决方案.

在我自己的数据库中,删除它的SQL将是:

alter table MYTABLE drop constraint SYS_C0044566
Run Code Online (Sandbox Code Playgroud)

查询all_constraints视图时,我可以看到约束:

select * from all_constraints where table_name = 'MYTABLE'
Run Code Online (Sandbox Code Playgroud)

但我不知道如何配合工作SEARCH_CONDITIONLONG数据类型或如何最好地动态删除即使我知道它的名字查找到的约束.

那么,我如何创建一个更改脚本,可以根据它的内容而不是它的名称来删除这个约束?


编辑:@ Allan的回答很好,但我担心(由于我缺乏Oracle的专业知识),任何可能具有系统生成名称的约束都可能与其相关联,这可能并不普遍.约束而不必知道它的名字.在逻辑上删除该约束时,总会有一种方法可以避免必须知道系统命名约束的名称吗?

oracle plsql constraints

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

使用PostgreSQL 9.3在CTE UPSERT中生成DEFAULT值

我发现使用可写CTE模拟PostgreSQL中的upsert是一个非常优雅的解决方案,直到我们在Postgres中获得实际的upsert/merge.(见:https://stackoverflow.com/a/8702291/558819)

但是,有一个问题:如何插入默认值?NULL当然,使用将无助于NULL显式插入NULL,与MySQL不同.一个例子:

WITH new_values (id, playlist, item, group_name, duration, sort, legacy) AS (
    VALUES (651, 21, 30012, 'a', 30, 1, FALSE)
    ,      (NULL::int, 21, 1, 'b', 34, 2, NULL::boolean)
    ,      (668, 21, 30012, 'c', 30, 3, FALSE)
    ,      (7428, 21, 23068, 'd', 0, 4, FALSE)
), upsert AS (
    UPDATE playlist_items m
    SET    (playlist, item, group_name, duration, sort, legacy)
       = (nv.playlist, nv.item, nv.group_name, nv.duration, nv.sort, nv.legacy)
    FROM   new_values nv
    WHERE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql merge upsert sql-insert

10
推荐指数
1
解决办法
1787
查看次数

标签 统计

sql ×2

constraints ×1

merge ×1

oracle ×1

plsql ×1

postgresql ×1

sql-insert ×1

sql-server ×1

upsert ×1