标签: alter-table

添加列 Query With 参数

大家好,我有 1 个带有以下查询语法的问题

 ALTER TABLE table_name
 ADD column_name column-definition;
Run Code Online (Sandbox Code Playgroud)

问题是我们可以使用参数来column_name字段@column_name吗?因为我正在创建由前端提供的列名作为参数的列。例如

ALTER TABLE table_name
ADD @column_name varchar(250);
Run Code Online (Sandbox Code Playgroud)

这是给出错误,所以有什么替代方法吗?

sql-server-2008 alter-table

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

明显错误的超过 8K 行长度消息

在尝试更改 SQL Server 表时添加 DATE 和 FLOAT 列。我收到一条消息:

警告:表“CustomerTransactions”已创建,但其最大行大小超过了允许的最大值 8060 字节。如果结果行超过大小限制,则对该表的 INSERT 或 UPDATE 将失败。

我知道 8K 的限制,但是我很难过,因为桌子没有超过 8K。

DDL 和故障贴在下面。不知道去哪里看得更远。有什么建议吗?

更改表:

            ALTER TABLE [dbo].[CustomerTransactions] 
            ADD 
                NumericDate FLOAT,
                FirstDayOfWeek DATE,
                LastDayOfWeek DATE,
                NFirstDayOfWeek FLOAT,
                NLastDayOfWeek FLOAT,
                FirstDayOfMonth DATE,
                LastDayOfMonth DATE,
                NFirstDayOfMonth FLOAT,
                NLastDayOfMonth FLOAT,
                HalfMonthStart DATE,
                HalfMonthEnd DATE,
                NHalfMonthStart FLOAT,
                NHalfMonthEnd FLOAT,
                HalfOfMonth INT,
                FirstDayOfQuarter DATE,
                LastDayOfQuarter DATE,
                NFirstDayOfQuarter FLOAT,
                NLastDayOfQuarter FLOAT,
                FirstDayOfYear DATE,
                LastDayOfYear DATE,
                NFirstDayOfYear FLOAT,
                NLastDayOfYear FLOAT
Run Code Online (Sandbox Code Playgroud)

系统列总数

select count(*) NumCols, SUM(sc.length) SumLength
from syscolumns sc  
inner …
Run Code Online (Sandbox Code Playgroud)

index database-design sql-server alter-table ddl

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

添加新列后表大小不会改变

我正在尝试检查添加具有默认值的新列后表大小将如何增加。

我使用以下默认值:NULL, ''(空字符串)和some text(一些随机文本)`但似乎表大小没有改变。

我正在使用以下语句:

EXEC sp_spaceused '[Table_A]';

ALTER TABLE [dbo].[Table_A]
ADD [Loops] NVARCHAR(900)
CONSTRAINT [DF_Loops] DEFAULT('XXX') WITH VALUES;

EXEC sp_spaceused '[Table_A]';

ALTER TABLE [dbo].[Table_A]
DROP CONSTRAINT [DF_Loops]

ALTER TABLE [dbo].[Table_A]
DROP COLUMN [Loops];
Run Code Online (Sandbox Code Playgroud)

sp_spaceused总是返回:

name                                               rows                 reserved           data               index_size         unused
------------------------------------------------- -------------------- ------------------ ------------------ ------------------ ------------------
Table_A                                            73540994             8701688 KB         6658544 KB         2042976 KB         168 KB
Run Code Online (Sandbox Code Playgroud)

谁能告诉我做错了什么?

sql-server size alter-table sql-server-2014

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

在 SQL Server 中禁用查找约束

我正在对 SQL Server 中的约束进行审计。

如何找到所有未启用的约束?

在使用下一个声明之后:

alter table mytable nocheck constraint all
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server constraint alter-table ddl

2
推荐指数
3
解决办法
5664
查看次数

如何在函数中按顺序对表列表运行 ALTER TABLE

我有一个模式(称为import),其中数据作为表导入,以及一个处理它们的函数。之后我想将这些表移到另一个模式中(称为data_archive)中。现有功能运行良好,但我找不到更改架构的方法;这是我编写的一个函数:

我的想法是根据selecta 为该管理制作的表格提供的标准创建表格列表,然后遍历此列表并执行以下操作Alter table xxxx SET schema data_archive

CREATE OR REPLACE FUNCTION archive_datasets()
  RETURNS VOID AS
$BODY$
DECLARE
   table_rec  record;

BEGIN

   FOR table_rec IN
      SELECT t.table_name
      FROM information_schema.tables AS t
      WHERE table_schema = 'import'
      AND quote_ident(t.table_name) IN (
              SELECT "table_name"
              FROM data_sets 
              WHERE status IN ('Processed', 'Archived', 'Deleted')
              ) 

   LOOP
     ALTER TABLE quote_ident(table_rec.table_name) SET schema data_archived;
   END LOOP;

END;
$BODY$
  LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

ERROR:  syntax error at or near "("
LINE 28: …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql alter-table plpgsql functions

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

如何添加/更新具有递增值的列并根据 SQL 中的另一列重置所述值

我很难过,我一直在搜索和研究,直到我的浏览器标签不再显示关闭按钮(“X”),直到您将鼠标悬停在它们上面。我一遍又一遍地尝试重写搜索词,但我想我不知道该问什么,所以如果已经回答了这个问题,我深表歉意。

我试图弄清楚如何将一个 INT 列添加到一个表中,该列从 1 开始并根据另一个列值(我们称之为case_id)递增(我们称此字段版本),如果该值与先前迭代的行 - 如果它不相同,则版本值应重置为 1。

我试图通过更新我创建的临时表或在 SELECT INTO 语句期间添加值来解决这个问题。

此表的目的是存储案例的历史更新记录,由case_id列标识,此版本值与修改时间戳的顺序相同。

将此表结构视为源数据的示例:

---------------------------------
| case_id | modify_time         |
---------------------------------
| 1       | 2015-05-01 11:12:13 |
| 1       | 2015-05-02 12:13:14 |
| 1       | 2015-05-03 13:14:15 |
| 2       | 2015-05-01 11:12:13 |
| 2       | 2015-05-01 12:13:14 |
| 3       | 2015-05-02 11:12:13 |
---------------------------------
Run Code Online (Sandbox Code Playgroud)

将此作为我想要实现的最终结果的示例:

-------------------------------------------
| case_id | modify_time         | version |
-------------------------------------------
| 1       | …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql alter-table update temporary-tables

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

上次更改 InnoDB 表结构的日期

我想知道如何确定ALTER TABLE...对给定表进行的最后一次更改 ( ) 是什么时候。

有一个旧答案可用,但不幸的是它不适用于 InnoDB 表。

看看frm文件日期时间,这行得通吗?

-rw-r-----   1 mysql    mysql       18622 Oct 24 21:07 mysql/data/mydb/mytable.frm
-rw-r-----   1 mysql    mysql     2114688 Oct 28 06:26 mysql/data/mydb/mytable.ibd
Run Code Online (Sandbox Code Playgroud)

Oct 24 21:07似乎大致对应于上次执行结构更改的时间。
那是可靠的信息吗?

mysql innodb alter-table datetime

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

数据保持不变时更改列数据类型而无需重写

例如:

  • timestamp(tz)int8
  • dateint4
  • jsontext

原始数据不变,唯一的区别是数据的处理方式。因此,应该可以干净且即时地来回更改。

  1. 我如何检查是否确实如此?

  2. 如果不是这种情况(表格被重写),我如何在不重写的情况下做到这一点?

postgresql datatypes alter-table

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

如果列不存在,则向表中添加列并填充添加的列

我有一个看起来像这样的代码

declare @query = '
   Alter Table Temp
   Add NewColumn int

   update Temp
   set NewColumn = 100'

exec (@query)
Run Code Online (Sandbox Code Playgroud)

它将给出错误 NewColumn 不存在。但如果我在不使用 @query = '' 的情况下正常运行它,它运行得很好。另外,当您使用 @query = ' text ' 然后 exec 运行这样的代码时,它被称为什么?

sql-server alter-table table

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

ALTER TABLE … ADD COLUMN 在一个小表上花费很长时间,pg_stat_activity 不显示该表上的任何查询

所以这是永远挂起的查询:

ALTER TABLE tasks
ADD COLUMN in_progress BOOLEAN NOT NULL DEFAULT FALSE;
Run Code Online (Sandbox Code Playgroud)

该表tasks少于 20,000 行,每 5 分钟左右查询一次。

我检查了pg_stat_activity大约 10 次,但从未显示任何锁定表的查询:

SELECT *
FROM pg_stat_activity
WHERE query LIKE '%tasks%';

--- No results
Run Code Online (Sandbox Code Playgroud)

我尝试了真空吸尘器,但没有帮助:

VACUUM (VERBOSE, ANALYZE) tasks;
Run Code Online (Sandbox Code Playgroud)

我还尝试添加没有约束和默认值的列,我希望在这样的表上几乎是即时的,但是当我停止查询时,查询已经运行了 1 分钟:

ALTER TABLE tasks
ADD COLUMN in_progress BOOLEAN;
Run Code Online (Sandbox Code Playgroud)

我在同一时间段内对另一个表(约 1000 行)运行了查询,结果是即时的。

任何想法?

PostgreSQL 11.13

通过 DBeaver 执行的查询(为了以防万一,我多次无效/重新连接)。

postgresql alter-table locking

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