标签: insert-into

SQL在If和Else块中插入临时表

我正在尝试根据SQL 2005中的条件结果填充临时表.临时表将具有相同的结构,但将根据条件使用不同的查询填充.下面的简化示例脚本在ELSE块的语法检查中失败,INSERT INTO错误为:

数据库中已经有一个名为"#MyTestTable"的对象.

DECLARE @Id int
SET @Id = 1

IF OBJECT_ID('tempdb..#MyTestTable') IS NOT NULL DROP TABLE #MyTestTable

IF (@Id = 2) BEGIN 
    SELECT 'ABC' AS Letters
    INTO #MyTestTable;
END ELSE BEGIN
    SELECT 'XYZ' AS Letters
    INTO #MyTestTable;
END
Run Code Online (Sandbox Code Playgroud)

我可以在IF/ELSE语句之前创建临时表,然后只INSERT SELECT在条件块中执行语句,但是表会有很多列,我试图提高效率.这是唯一的选择吗?或者有一些方法可以使这项工作?

谢谢,马特

sql sql-server-2005 temp-tables insert-into

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

将值插入表Oracle SQL

我正在尝试将值插入Oracle SQL中的"Employee"表.我有一个关于输入由外键确定的值的问题:

我的员工有3个由外键确定的属性:State,Position和Manager.我使用INSERT INTO语句插入值并手动键入数据.我是否需要在物理上查找每个引用以输入数据,或者是否有可以使用的命令?例如

INSERT INTO Employee 
(emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager)
VALUES 
(001, "John Doe", "1 River Walk, Green Street", 3, 5, 1000)
Run Code Online (Sandbox Code Playgroud)

这应该填充employee表(John Doe, 1 River Walk, Green Street, New York, Sales Executive, Barry Green).纽约state_id=3State桌子上; 销售主管position_id=5positions谈判桌上; 和巴里格林manager_id=1000manager桌子上.

有没有办法可以输入引用表的文本值,以便Oracle识别文本并将其与相关ID匹配?我希望这个问题有意义,很乐意澄清任何事情.

谢谢!

sql oracle database-design insert-into

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

为什么MySQL'插入... select ...'比单独选择要慢得多?

我正在尝试将查询结果存储在临时表中以供进一步处理.

create temporary table tmpTest
(
    a FLOAT,
    b FLOAT,
    c FLOAT
)
engine = memory;

insert into tmpTest
(
    select a,b,c from someTable
    where ...
);
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,插入需要一分钟,而单独的子选择只需要几秒钟.为什么将数据写入临时表而不是将其打印到我的SQL管理工具的输出需要这么长时间?

更新 我的设置:MySQL 7.3.2集群,带有8个Debian Linux ndb数据节点1个SQL节点(Windows Server 2012)

我正在运行select on的表是一个ndb表.

我试图找出,如果执行计划在使用'insert into ..'时会有所不同,但它们看起来一样:(抱歉格式化,stackoverflow没有表格)

id  select_type     table       type    possible_keys   key     key_len ref                 rows        Extra
1   PRIMARY         <subquery3> ALL     \N              \N      \N      \N                  \N          \N
1   PRIMARY         foo         ref     PRIMARY         PRIMARY 3       <subquery3>.fooId   9747434     Using where
2   SUBQUERY        someTable   range   PRIMARY         PRIMARY 3       \N                  136933000 …

mysql performance temp-tables insert-into mysql-cluster

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

对同一个表的列强制执行外键约束

在下表中输入值时,如何在SQL中对同一表的列强制执行外键约束:

员工:

  • empid数字,
  • 经理号码(必须是现有员工)

sql oracle foreign-keys self-reference insert-into

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

使用查询INSERT INTO,并添加默认值

我想运行一个INSERT INTO table SELECT... FROM... 问题是我插入的表有5列,而我选择的表只有4.第5列需要设置我做的默认值.我怎么能做到这一点?查询将是这样的(注意:这是Oracle):

INSERT INTO five_column_table
     SELECT * FROM four_column_table
     --and a 5th column with a default value--;
Run Code Online (Sandbox Code Playgroud)

sql oracle insert-into

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

SQL INSERT INTO WITH SELECT查询

没有经验的SQL,我希望有人可以帮助我.

我有一个空的临时表,以及一个包含信息的表.

我的查询概述如下:

CREATE TABLE [#Temp] (ID Int, Field1 Varchar)

INSERT INTO [#Temp]
    SELECT ID, Field1 
    FROM [Other_table] 
    WHERE ID IN (ID1, ID2, ID3...)
Run Code Online (Sandbox Code Playgroud)

所以我将一大堆ID传递给查询,并且ID对应于ID Other_table,它必须使用此信息填充临时表.

是否可以在同一查询中保存与其他位置不匹配的ID(比如另一个临时表)?或者对于相同的临时表,在这种情况下只有Field1 = NULL?

我需要对未匹配的ID做额外的工作,所以我需要在某处随时访问它们.我希望在这一个查询中完成所有操作,如果这是最快的方法.

编辑:

谢谢你的帮助.

道歉,我现在看到我的问题并不完全清楚.

如果Other_table包含ID 1 - 1000,并且我传入ID 999,1000和1001,我希望临时表包含999和1000的信息,然后还有ID为1001且Field1 = NULL的条目.我不希望ID 1 - 998与Field1 = NULL一起返回.

sql sql-server select insert-into

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

用于Snowflake Datawarehouse的SELECT INTO语法

我相信SELECT INTOSnowflake中有类似的语法,但我无法找到使用它的文档或示例.

CREATE TABLE raw_data (
    Timestamp TIMESTAMP NOT NULL, 
    Date DATE NOT NULL, 
    UserID STRING,
    Address STRING,
    Phone STRING,
    Value INTEGER
);

COPY INTO raw_data from 's3://my_bucket'
CREDENTIALS=(AWS_KEY_ID='XXXXX' AWS_SECRET_KEY='XXXX')
ON_ERROR=CONTINUE;

CREATE TABLE summary (
    Date DATE NOT NULL,
    UserID STRING,
    Value INTEGER
);

INSERT INTO summary 
SELECT Date, UserID, Value FROM raw_data
Run Code Online (Sandbox Code Playgroud)

上面的工作,但不是定义summary我想要的表,而是SELECT INTO让SQL解析器为我创建表.

sql insert-into snowflake-cloud-data-platform

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

如何根据另一个表的查找插入值?

我需要找到一种方法来做一个INSERT INTO table A但是其中一个值是来自表B上的查找,允许我说明.

我有以下两个表:

表A:

A1: String
A2: Integer value coming from table B
A3: More Data
Run Code Online (Sandbox Code Playgroud)

表B:

B1: String
B2: Integer Value
Run Code Online (Sandbox Code Playgroud)

A的示例行:{"Value",101,MoreData} B的示例行:{"English",101}

现在,我知道我需要将以下内容插入到A {"Value2","English",MoreData}中,但显然这是行不通的,因为它期望第二列中的Integer不是"English",所以我需要首先在表B中进行查找.

像这样的东西:

INSERT INTO tableA (A1, A2, A3) 
VALUES ("Value2", SELECT B2 FROM tableB where B1="English", MoreData);
Run Code Online (Sandbox Code Playgroud)

显然这不起作用......

有什么建议?

sql insert-into

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

避免“不能嵌套 INSERT EXEC 语句”

我知道这不可能嵌套insert ... exec语句,但我仍然很感兴趣 - 有没有办法检查我是否已经处于活动状态insert ... exec以避免实际错误?

所以我想要这样的东西:

....
if <check if I have outer insert into exec> = 0
    insert into <#some temporary table>
    exec <stored procedure>
Run Code Online (Sandbox Code Playgroud)

换句话说 -insert ... exec是可选的,拥有它很好,但如果有人试图用外部调用我的过程,我想跳过它insert ... exec

sql sql-server insert-into

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

使用一个INSERT语句而不是每行INSERT创建PostgreSQL转储

我尝试使用pg_dump进行表数据转储,如下所示:

pg96\bin\pg_dump ... --format plain --section data --column-inserts --file obj.account.backup --table obj.account database_xyz
Run Code Online (Sandbox Code Playgroud)

而不是得到

INSERT INTO obj.account(name, email, password) VALUES ('user1','email1','password1');
INSERT INTO obj.account(name, email, password) VALUES ('user2','email2','password2');
Run Code Online (Sandbox Code Playgroud)

我想得到

INSERT INTO obj.account (name, email, password) VALUES 
('user1','email1','password1'),
('user2','email2','password2');                                                  
Run Code Online (Sandbox Code Playgroud)

有没有没有任何非PostgreSQL后处理的方法吗?

postgresql backup pg-dump insert-into

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