标签: insert

INSERT 不适用于 NOT NULL 但 UPDATE 可以,为什么?

我有这个表定义:

CREATE TABLE `media` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `brands_id` int(11) DEFAULT NULL,
  `media_type` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `title` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `description` longtext COLLATE utf8_unicode_ci NOT NULL,
  `thumbnail_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `media_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `media_code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `inactive` tinyint(1) NOT NULL,
  `createdAt` datetime NOT NULL,
  `updatedAt` datetime NOT NULL,
  `titleHtml` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `descriptionHtml` longtext COLLATE utf8_unicode_ci NOT NULL,
  `useHtml` tinyint(1) NOT NULL,
  PRIMARY KEY …
Run Code Online (Sandbox Code Playgroud)

mariadb null insert update

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

如何在临时表中插入大量数据?

我正在构建一个程序,它以以下形式生成 T-SQL 查询:

DECLARE @In TABLE (Col CHAR(20))
INSERT INTO @In VALUES value1, value2... value1000
GO
INSERT INTO @In VALUES value1001, value1002...
Run Code Online (Sandbox Code Playgroud)

但第二条INSERT语句抛出错误:

消息 1087,级别 15,状态 2,第 1 行
必须声明表变量“@In”。

我究竟做错了什么?

insert bulk t-sql

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

即使行没有更改,INSERT INTO ... ON DUPLICATE KEY UPDATE 也会执行吗?

让我解释 :

让我们假设我们有一个数据库“用户”:

ID   Name   Surname
===================
1    John   Doe
2    Foo    Bar
3    Foo    Baz
Run Code Online (Sandbox Code Playgroud)

现在我想更改所有这三行。我将抛出以下插入:

INSERT INTO user (ID, Name, Surname) VALUES (1, 'John', 'Conor') ON DUPLICATE KEY UPDATE ID = 1, Name = 'John', Surname = 'Conor';
INSERT INTO user (ID, Name, Surname) VALUES (2, 'Foo', 'Bar') ON DUPLICATE KEY UPDATE ID = 2, Name = 'Foo', Surname = 'Bar';
INSERT INTO user (ID, Name, Surname) VALUES (3, 'Foo', 'Baz') ON DUPLICATE KEY UPDATE ID = 3, …
Run Code Online (Sandbox Code Playgroud)

mysql insert duplication update

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

如何在一个查询中对 postgresql 数据库执行多次插入

我有一个订单、收件人和项目表。

我想根据上一个查询的响应将数据插入到每个表中。

insert into recipient(name, address) values(name, address);
insert into orders(recipient_id, total_price, total_quantity) values(recipient_id, 2000, 20);
insert into items(order_id, item, price, quantity, total) values(order_id, item1, 230, 2, 260);
insert into items(order_id, item, price, quantity, total) values(order_id, item2, 500, 2, 1000);
Run Code Online (Sandbox Code Playgroud)

我想在单个 PostgreSQL 查询中执行此操作。

这是我尝试过的

insert into users (fullname, email, phone, address, status)
  values ('Mine Essien', 'davidessienshare@gmail.com', '08167462431', 'Andela Epic tower Lagos')
  returning id as recipient_id
)

new_order AS(
  insert into orders(user_id, recipient_id, quantity, total_cost)
  values(1, recipient_id, 5, 9500)
  returning id …
Run Code Online (Sandbox Code Playgroud)

postgresql insert

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

表和数据集之间的合并/交集 - 如何实现?

考虑下表:

Id          Hash
----------- ----------------------------------
1           0x31F777F0804D301936411E3ECD760859
2           0xD64A593F3E9ACC972158D522A4289EA0

(Id is an identity column)
Run Code Online (Sandbox Code Playgroud)

在该表中,我想合并以下数据集:

Hash
----------------------------------
0x31F777F0804D301936411E3ECD760859
0x31F777F0804D301936411E3ECD760859
0x0C5A65264F92A543E7AAA06375349C06

(Id is NOT present in the dataset)
Run Code Online (Sandbox Code Playgroud)

合并规则如下:

  • 如果表中不存在哈希,则将其插入表中;
  • 如果该hash在数据集中不存在,则从表中删除;
  • 如果哈希确实存在于双方,并且表中有X个实例,源中有Y个实例,则应将(YX)个实例插入到表中。

合并的结果应该使表格看起来像这样:

Id          Hash
----------- ----------------------------------
1           0x31F777F0804D301936411E3ECD760859
3           0x31F777F0804D301936411E3ECD760859
4           0x0C5A65264F92A543E7AAA06375349C06
Run Code Online (Sandbox Code Playgroud)

编写查询以实现此操作的最有效方法是什么?仅供参考,为简洁起见,省略了其他列。

sql-server insert merge

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

为什么即使在显式设置 IDENTITY_INSERT ON 并使用列列表后,我仍会收到身份插入错误?

我的代码:

SET IDENTITY_INSERT SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn ON

INSERT INTO SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn
SELECT ColumnWithIdentity, OtherColumnWithoutIdentity, LastColumnInThisTable
FROM ALinkedServer.PrettyCoolDatabaseAsWell.StandardSchema.TableWithIdentityColumn

SET IDENTITY_INSERT SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn OFF
Run Code Online (Sandbox Code Playgroud)

错误:

消息 8101,级别 16,状态 1,第 4 行

表 'SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn' 中标识列的显式值只能在使用列列表且 IDENTITY_INSERT 为 ON 时指定。

是什么赋予了?

sql-server insert sql-server-2008-r2 identity table

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

我可以在 INSERT 中使用 UPDATE 的 OUTPUT 吗?

我想在我的应用程序的“SystemSettings”表中添加一条记录,并使用 UPDATE 中的值设置 PK 值。PK 值来自“TS_LASTIDS”表,其中包含此应用程序 (MicroFocus SBM) 中每个表的最大 PK 值。我需要增加该表中的“TS_LASTID”列,并在将新记录插入“SystemSettings”表时使用新值作为 PK。

Insert Into
   ts_SystemSettings ( ts_Id, ts_Name, ts_LongValue)

Values (
   ( -- ******************** This subquery updates the PK in TS_LASTIDS and outputs the new value
      Update
         ts_LastIds
      Set
         ts_LastId=ts_LastId+1
      Output
         INSERTED.ts_LastId
      Where
         ts_Name = 'SystemSettings'
   ) ,  -- ******************** 
   'NSLastChangeId' ,
   1 ,
) ;
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚语法。这是 MS SQL Server 2012。

sql-server insert update output-clause

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

SQL Server-Table 有许多插入表本身的 AFTER INSERT 触发器

我特意创建了这个例子来代表我的问题。

我创建了这样的表:

CREATE TABLE a
(
  id INT
)
Run Code Online (Sandbox Code Playgroud)

然后我像这样创建了 2 个AFTER TRIGGER

CREATE TRIGGER insert_a
ON a AFTER INSERT
AS
BEGIN
  INSERT INTO a VALUES (1)
END
GO

CREATE TRIGGER insert_a2
ON a AFTER INSERT
AS
BEGIN
INSERT INTO a VALUES(2)
END
GO
Run Code Online (Sandbox Code Playgroud)

之后我插入到表中:

INSERT INTO a VALUES (0)
Run Code Online (Sandbox Code Playgroud)

我得到了结果:

消息 217,级别 16,状态 1,过程 insert_a2,第 5 行 [批处理起始行 0]。

超出最大存储过程、函数、触发器或视图嵌套级别(限制为 32)。

我认为这里存在周期性情况。触发器内部的插入,一次又一次地触发触发器。那会发生吗?

我想知道里面发生了什么?

有没有办法解决这个问题,但仍然保持完整的 2 AFTER INSERT触发器?

疯狂的情况。

trigger sql-server insert

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

如何在“IN”语句中使用关键字“VALUES”?

我在 sql server 2016

select @@version
Run Code Online (Sandbox Code Playgroud)

Microsoft SQL Server 2016 (SP2-CU15) (KB4577775) - 13.0.5850.14 (X64) Sep 17 2020 22:12:45 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows Server 2012 R2 上的基于内核的许可(64 位)数据中心 6.3(内部版本 9600:)(管理程序)

在 sql server 中的一个简单插入语句中,我有关键字 values

例如:

BEGIN TRANSACTION T1
SELECT @@TRANCOUNT

INSERT INTO [APCore].[usr].[userBusinessArea]
           ([businessAreaID]
           ,[userID])
     VALUES
           (21, 368), 
           (21, 227419) ,
           (21, 99906), 
           (21, 140470)


SELECT [1]= @@TRANCOUNT
--COMMIT TRANSACTION T1
--ROLLBACK
SELECT [2]=@@TRANCOUNT
Run Code Online (Sandbox Code Playgroud)

问题是,在我运行插入之前,我想使用与 相同的逻辑values来找出这些记录中是否已经有任何记录在表中。

否则你可能会得到这样的结果:

在此处输入图片说明

我的做法是:

select top 10 * from
[APCore].[usr].[userBusinessArea]
where …
Run Code Online (Sandbox Code Playgroud)

sql-server query syntax insert select

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

插入到 Oracle DB 表中的特定位置?

假设我有一个包含以下数据的表:

Name | Things
-------------
Foo  |   5
Bar  |   3
Baz  |   8
Run Code Online (Sandbox Code Playgroud)

如果我想插入一行,那么表的最终状态是:

Name | Things
-------------
Foo  |   5
Qux  |   6
Bar  |   3
Baz  |   8
Run Code Online (Sandbox Code Playgroud)

这可能吗?

我知道我们通常不依赖表中行的顺序,但我继承了一些代码来做到这一点。如果我可以插入到一个位置,我就可以避免重大的重构。

oracle insert

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