标签: alter-table

SQL Server - 更改表与删除并创建

我们的数据库是 SQL Server 2008 R2。我们有一些表有一些 varchar(500) 列,我想切换到 datetime2 或 bigint。我可以保证要切换的列中的所有数据对于正确的类型都是有效的。列更改确实会影响索引,但不会影响键。

在与同事讨论时,我们得出了两种解决问题的方法。这两个都将通过 T-Sql 脚本完成。

  1. 通过 select into 创建临时表,删除旧表并使用正确的数据类型重新创建表。重新创建索引。
  2. 通过更改当前表/数据类型 ALTER TABLE x ALTER COLUMN Y datetime2,然后重建或重新创建索引。

因为我相信数据会干净利落地转换,所以我倾向于#2。我的同事和 DBA 朋友更喜欢 #1,但我的同事不记得他们为什么这样训练他。DBA 朋友正在休假,所以我没有问他为什么。

有人可以提供有关他们认为更好的选择以及为什么的见解吗?最终这是我的决定,我想知道为什么 #1 比 #2 更受欢迎?

sql-server t-sql sql-server-2008-r2 alter-table drop-table

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

ALTER TABLE 语句与 CHECK 约束冲突

我需要检查datecom小于datelivr

create table Commande
(
Numcom int identity primary key,
Datecom date,
Datelivr date,
Codecli int foreign key references clients (Codecli) 
)

alter table Commande 
    add constraint date_check check(datediff(day,Datecom,Datelivr) > 0)
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息:

ALTER TABLE 语句与 CHECK 约束“date_check”冲突。冲突发生在数据库“tp4”,表“dbo.Commande”中。

这怎么会发生?

sql-server constraint alter-table ddl sql-server-2012

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

如何将所有表从一个 Postgres 模式移动到另一个

我想将所有表从架构移动xyz到默认架构public

我可以移动单个表

ALTER TABLE table_name
    SET SCHEMA public;
Run Code Online (Sandbox Code Playgroud)

我可以得到所有的桌子

SELECT table_name FROM information_schema.tables WHERE table_schema='xyz'
Run Code Online (Sandbox Code Playgroud)

有没有办法将这两者结合在一起?

schema postgresql alter-table

7
推荐指数
2
解决办法
6864
查看次数

将 BIG 表上的列数据类型从 numeric(18, 2) 更改为 numeric(22, 6)

我们有一个非常大的POSTGRES表,包含超过80 亿行,并且以非常高的速度增长(每天 3000 万行)。

我们的表是按日期分区的。每个分区包含6 个月的数据,除了第一个分区包含近18 个月的数据。

Postgres 版本:PostgreSQL 12.11

数据库规格: db.r6g.16xlarge (vCPU:64,内存:512,EBSBandwidth(Mbps):19000)

表架构:

create table table_1
(
    id       bigint default nextval('table_1_id_seq'::regclass) not null,
    user_id  integer                                            not null,
    amount   numeric(18, 2)                                     not null,
    date     timestamp                                          not null,
    column_1 varchar                                            not null,
    column_2 varchar,
    .
    .
    primary key (id, date)
) partition by RANGE (date);
Run Code Online (Sandbox Code Playgroud)

该表还包含多个索引(包括部分索引

create index index_1
    on table_1 …
Run Code Online (Sandbox Code Playgroud)

postgresql datatypes alter-table postgresql-performance

7
推荐指数
1
解决办法
1780
查看次数

在“ALTER TABLE DROP PARTITION”时避免“等待表元数据锁定”?

我有一些许多用户需要访问的表:

mysql> show create table v3_cam_date\G
*************************** 1. row ***************************
       Table: v3_cam_date
Create Table: CREATE TABLE `v3_cam_date` (
  `campaignid` mediumint(9) NOT NULL DEFAULT '0',
  `totalclick` mediumint(9) unsigned NOT NULL DEFAULT '0',
  `totalview` int(11) unsigned NOT NULL DEFAULT '0',
  `realclick` mediumint(9) unsigned NOT NULL DEFAULT '0',
  `clickcharge` mediumint(9) unsigned NOT NULL DEFAULT '0',
  `viewcharge` int(11) unsigned NOT NULL DEFAULT '0',
  `uv` mediumint(9) unsigned NOT NULL DEFAULT '0',
  `uc` mediumint(9) unsigned NOT NULL DEFAULT '0',
  `dt` date NOT NULL DEFAULT '0000-00-00',
  `ctr` …
Run Code Online (Sandbox Code Playgroud)

mysql innodb partitioning alter-table locking

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

如何在 PostgreSQL 中将 NOT NULL 列设置为 NULL?

我是 PostgreSQL 的新手,这就是我问这个问题的原因。我有一个表app_client_users和一个名为client_id. 最初我将其设置为NOT NULL,现在我想将其更改为允许 NULL。我试过了

alter table app_client_users alter column client_id int  NULL ;
Run Code Online (Sandbox Code Playgroud)

alter table app_client_users alter column client_id   NULL ;
Run Code Online (Sandbox Code Playgroud)

这是行不通的。我该如何解决?

postgresql null alter-table

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

将 nvarchar(max) 列更改为 nvarchar(50) 会锁定表吗?

我在 SQL Server (Azure) 中有一个包含 140 万行的表。

我想索引其中一列;但是,它的数据类型是nvarchar(max)(通过使用我想象的 EF 默认为这样)。我正在使用实体框架,并且可以进行迁移,将此数据类型更改为nvarchar(50).

我担心这需要多长时间,以及是否会导致锁定问题。我只扩展过列,所以我不确定会发生什么。我确实知道此列中的数据适合新尺寸。

我正计划创建数据库的副本并尝试一下。我也考虑过迁移到一个新列,但如果不是太痛苦,我更愿意更新当前列。

sql-server datatypes alter-table azure-sql-database

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

如何将 PostgreSQL 10 标识列添加到带有行的现有表中?

我有一个包含一些行的表,我尝试使用以下命令添加一个标识列:

ALTER TABLE sourceTable 
    ADD COLUMN ogc_fid int                
        GENERATED BY DEFAULT AS IDENTITY;
Run Code Online (Sandbox Code Playgroud)

建议使用上面的命令来回答这个问题:

但我得到:

错误:“ogc_fid”列包含空值
SQL 状态:23502

看起来表的现有行没有自动生成标识,但会导致此错误(如果表没有行,该命令可以正常工作)。有任何想法吗?我是否必须首先为我添加的列生成值DEFAULT nextval('some_sequence')?或者在 PostgreSQL 10 中有更好的方法吗?

postgresql alter-table identity postgresql-10

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

添加新列时使用不为空的默认值是否安全?

我们有一个由 Postgresql v11.4提供支持的 Rails 应用程序,我想在其中添加一个具有默认值和非空约束的新列,如下所示:

ALTER TABLE "blogs" ADD "published" boolean DEFAULT FALSE NOT NULL
Run Code Online (Sandbox Code Playgroud)

我知道添加具有默认值的新列是安全的。但是,与 组合使用仍然安全吗NOT NULL?或者它会锁定数据库吗?谢谢!

postgresql null default-value alter-table postgresql-11

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

是否可以估计 DROP 语句还剩下多少时间?

我做了这个查询:ALTER TABLE dbname.tablename DROP COLUMN columnname它已经运行了几个小时,我想知道它还需要多长时间。

大约有 750m 行。

谢谢 !

如果您需要更多详细信息,我会提供给他们,我不想提供那些没有用的信息

mysql alter-table query-performance

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