标签: insert

在 INSERT 中嵌套 SELECT

我正在尝试执行以下操作:

INSERT INTO stories 
   (vid, ip, body, timestamp) 
VALUES (
   (SELECT vid+1 FROM stories ORDER BY vid DESC LIMIT 1), 
   INET_ATON('127.0.0.1'), 
   'test', 
   NOW()
)
Run Code Online (Sandbox Code Playgroud)

但是我在弄清楚如何将 SELECT 语句的返回数据嵌套到 INSERT 语句中时遇到了问题。我需要弄清楚如何获得最高的现有 vid 并将其增加 1。

有任何想法吗?

mysql insert

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

检查 Compact Insert 语句上的重复

我不确定这是否是正确的术语“紧凑插入语句”,这正是我一直听到的。它是这样的:

INSERT INTO [tblUsers]
       ([username], [password]) 
VALUES ('user1', 'pass1'), 
       ('user2', 'pass2')
Run Code Online (Sandbox Code Playgroud)

无论如何,我们有一个超过 500 万行的表,并且即将导入一些数据,但是大约 75% 的数据被复制的可能性很高(我们从多个来源购买数据,但它们共享大约 30-40% 的数据)我们的每个来源:/)。

如果我对列执行唯一约束,则从该点开始整个插入都会失败(当然,除非包含在事务中)。

我只是不知道如何有效地做到这一点以及如何使用可以重用的代码。

sql-server-2008 insert import

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

如果 <table> 具有虚拟列,是否(以及如何)在 Oracle 中“插入到 <table> 值 <rowtype-variable>”

这是一张桌子

create table tq84_virtual_test_without (
  col_1 number,
  col_2 number,
  col_3 number,
  col_4 number,
  col_5 number
);
Run Code Online (Sandbox Code Playgroud)

规则col_5的值是其他四列的总和。

所以表格被相应地填充:

insert into tq84_virtual_test_without values( 1, 2, 3, 4, 10);
insert into tq84_virtual_test_without values( 3, 8, 7, 5, 23);

commit;
Run Code Online (Sandbox Code Playgroud)

现在,假设需要复制一行并更改列的值。这当然可以非常优雅地完成(恕我直言,也就是说)使用rowtype-variable,就像这样

declare
  r tq84_virtual_test_without%rowtype;
begin

  select * into r from tq84_virtual_test_without where col_2 = 8;

  r.col_4 := r.col_4 - 2;
  r.col_5 := r.col_5 - 2;

  insert into tq84_virtual_test_without values r;

end;
/
Run Code Online (Sandbox Code Playgroud)

这很优雅,因为它不会用insert into …

oracle oracle-11g-r2 insert virtual-columns

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

如何在 MySQL 的另一个数据库/模式中插入行

假设我有以下数据库/模式设置和下表:

    SCHEMA_1 (default):
        TABLE_1

    SCHEMA_2:
        TABLE_2
Run Code Online (Sandbox Code Playgroud)

如何在另一个模式的表中插入行?以下似乎不起作用:

    INSERT INTO TABLE_2 (...) VALUES(...)
Run Code Online (Sandbox Code Playgroud)

如何在另一个架构中插入行?

mysql schema insert

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

插入的行数为负

我只是运行了一个相当简单的 INSERT 语句(我认为它处理了很多行),我得到了消息:

-1,311,750,183 行插入

我应该担心它是负面的吗?

oracle oracle-11g insert

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

从单行插入两行

我必须将usersToImport表中的用户导入userContact表中。usersToImport在一行中包含每个用户的电话和电子邮件信息,但userContact每行存储一种联系信息。

这是我目前的做法:http : //sqlfiddle.com/#!6/c9b2e/1(出于某种原因,它没有输出任何内容,但代码在 SSMS 中有效)。

有没有办法在不使用两个不同选择的情况下做到这一点?也许自加入usersToImport或以case某种方式使用。

sql-server insert t-sql sql-server-2012

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

插入相关表

我有一个具有以下架构的数据库设置:

CREATE TABLE siteInfo (
    siteID             SERIAL  NOT NULL,
    siteName           TEXT    NOT NULL,
    siteHost           TEXT    NOT NULL,
    notes              TEXT    NOT NULL,
    allowableCountries TEXT    NOT NULL,
    displayChance      INT     NOT NULL,
    imagePath          TEXT    NOT NULL,
    PRIMARY KEY (siteID)
);

CREATE TABLE siteLinks (
    siteID             SERIAL  NOT NULL,
    URL                TEXT    NOT NULL,
    FOREIGN KEY (siteID) REFERENCES siteInfo(siteID) ON DELETE CASCADE
);

CREATE TABLE siteDemographicLinks (
    siteID             SERIAL  NOT NULL,
    URL                TEXT    NOT NULL,
    country            TEXT    NOT NULL,
    chance             INT     NOT NULL,
    FOREIGN KEY …
Run Code Online (Sandbox Code Playgroud)

postgresql insert cte auto-increment

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

插入或选择后返回id

我想构建一个函数,如果表中不存在电子邮件值并返回email_id行的值,则该函数将插入电子邮件。我怎样才能做到这一点?
另外,如果电子邮件没有插入并且它已经存在于数据库中,我该如何返回 ID?我需要执行另一个SELECT吗?

BEGIN;
  LOCK TABLE mailing_list IN SHARE ROW EXCLUSIVE MODE;
  INSERT INTO mailing_list (email)
  SELECT 'email'
   WHERE NOT EXISTS (
     SELECT * FROM mailing_list WHERE email='email'
   );
COMMIT;
Run Code Online (Sandbox Code Playgroud)

我试过添加,returning id但它不起作用。我有:

查询没有结果数据的目的地

Sqlfiddle

postgresql insert concurrency plpgsql postgresql-9.3

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

插入记录的顺序不匹配

请检查下面的表结构和要插入该表的记录。

CREATE TABLE [tabGeneraltable](
   id int identity,
   [codGenLedger] [uniqueidentifier] NOT NULL,
   [codInvoice] [numeric](18, 0) NULL,
   [accountValue] [numeric](18, 2) NULL,
   [articleValue] [nvarchar](50) NULL,
   [codFinAccount] [int] NULL,
   [documentNbr] [nvarchar](50) NULL,
   [valueDate] [datetime] NULL,
   [insertDate] [datetime] NULL,
   CONSTRAINT [PK_tabGeneralLedger] PRIMARY KEY CLUSTERED([codGenLedger] ASC)
)


insert into [tabGeneraltable]([codGenLedger],[codInvoice], [codFinAccount],
                              [accountValue],[insertDate])
select NEWID(),1,11,232,getdate()
union all
select NEWID(),10,45,214,getdate()
union all
select NEWID(),9,425,410,getdate()
union all
select NEWID(),14,475,356,getdate()
Run Code Online (Sandbox Code Playgroud)

插入所有记录后,当在这个表上执行一个简单的选择语句时

select * from tabGeneraltable
Run Code Online (Sandbox Code Playgroud)

标识列 ID 的顺序不正确或记录是随机插入的。(insertDate如果单独插入所有记录,请检查列值。)

为什么会发生这种情况?

sql-server insert

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

如何更新/插入/注入节点到 XML

我有一个应用程序,它在 XML 字段中存储可选的站点信息。

示例表:

CREATE TABLE [dbo].[Sites](
    [SiteID] [int] IDENTITY(1,1) NOT NULL,
    [SiteName] [nvarchar](80) NULL,
    [SiteInfo] [xml] NULL );

INSERT INTO [dbo].[Sites] ([SiteName]) VALUES  ('TestSite1') ; 
Run Code Online (Sandbox Code Playgroud)

如果没有应用属性,则 XML 字段为 NULL。如果这些属性中的任何一个确实适用,则应用程序会插入一个 XML 文档和相关节点。

一个有效的例子如下所示:

<SiteInfo>
  <BoreID>ABC123</BoreID>
  <ConsentCompliance>true</ConsentCompliance>
</SiteInfo>
Run Code Online (Sandbox Code Playgroud)

我需要从另一个系统迁移一些数据,所以我试图将数据插入到这个字段/XML 中。到目前为止,我的尝试导致了应用程序不喜欢的单例节点。

使用我在网上找到的一些示例,我尝试了以下操作:

update [dbo].[Sites] 
SET [SiteInfo].modify('insert <Anothernode>ABC123</Anothernode> into (/SiteInfo)') 
where Siteid = 1 
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

消息 2226,级别 16,状态 1,第 1 行 XQuery [dbo.Sites.SiteInfo.modify()]:'insert' 的目标必须是单个节点,找到 'element(SiteInfo,xdt:untyped) *'

问题:

  1. 如果该字段为 NULL,我是否需要先更新该字段以插入 xml 的基数,然后才能插入它?
  2. 不使用开闭对的 XML 节点的名称是什么。 For example: <BoreID>ABC123</BoreID> vs a single side <BoreID=ABC123/>
  3. 是否有使用 …

sql-server-2008 xml insert

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