Questions tagged «insert»

SQL中的核心语句可以完成以下操作:将数据插入表中。

3
如何在PostgreSQL中的选择查询中将值插入表中?
我有一张桌子items (item_id serial, name varchar(10), item_group int)和一张桌子items_ver (id serial, item_id int, name varchar(10), item_group int)。 现在我想插入行items_ver从items。有没有简短的SQL语法可以做到这一点? 我尝试过: INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item_id = 2); 但我收到语法错误: ERROR: syntax error at or near "select" LINE 1: INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item... 我现在尝试: …
198 postgresql  insert 

3
如何插入包含外键的行?
使用PostgreSQL v9.1。我有以下表格: CREATE TABLE foo ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, type VARCHAR(60) NOT NULL UNIQUE ); CREATE TABLE bar ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, description VARCHAR(40) NOT NULL UNIQUE, foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT ); 假设第一个表foo是这样填充的: INSERT INTO foo (type) …

2
哪一种效率更高:从链接服务器中选择还是插入到链接服务器中?
假设我必须将数据从一台服务器导出到另一台(通过链接的服务器)。哪种说法会更有效? 在源服务器中执行: INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table] SELECT a, b, c, ... FROM [dbo].Udf_GetExportData() 或在目标服务器中执行: INSERT INTO [dbo].[Table] SELECT a, b, c, ... FROM OPENQUERY([OriginLinkedServer], 'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()') 哪一个会更快并且总共消耗更少的资源管理器(源服务器和目标服务器)?两台服务器都是SQL Server 2005。

4
我怎样才能知道为什么在某个表上插入会很慢?
我知道,出于多种原因,在SQL表上执行INSERT操作可能会很慢: 桌子上是否存在INSERT TRIGGER 许多必须检查的强制约束(通常是外键) 当在表的中间插入一行时,页面在聚集索引中拆分 更新所有相关的非聚集索引 阻止桌面上的其他活动 IO写响应时间差 ...我错过了什么? 如何确定我的具体情况中哪个责任人?如何衡量分页与非聚集索引更新与其他所有内容的影响? 我有一个存储的过程,一次插入大约10,000行(从临时表中),每10k行大约需要90秒。这太慢了,因为它会导致其他sps超时。 我已经查看了执行计划,并且看到了INSERT CLUSTERED INDEX任务和FK查找中的所有INDEX SEEKS,但仍不能确定为什么要花这么长时间。没有触发器,但是表中确实有少数FKey(似乎已正确索引)。 这是一个SQL 2000数据库。

3
高效插入具有聚簇索引的表
我有一条SQL语句,将行插入到表中,该表在TRACKING_NUMBER列上具有聚簇索引。 例如: INSERT INTO TABL_NAME (TRACKING_NUMBER, COLB, COLC) SELECT TRACKING_NUMBER, COL_B, COL_C FROM STAGING_TABLE 我的问题是-在SELECT语句中为聚集索引列使用ORDER BY子句是否有帮助,或者ORDER BY子句所需的额外排序会否抵消获得的任何收益?

2
插入大量行的最快方法是什么?
我有一个数据库,在其中我将文件加载到临时表中,从该临时表中我有1-2个连接来解析一些外键,然后将这些行插入到最终表中(每月有一个分区)。我有大约34亿行用于三个月的数据。 使这些行暂存到最终表中的最快方法是什么?SSIS数据流任务(使用视图作为源并激活快速加载)或插入INTO SELECT ....命令?我尝试了“数据流任务”,并在5个小时内可以得到大约10亿行(8核/服务器上192 GB RAM),这对我来说感觉很慢。

1
插入与OUTPUT相关的子查询表
我正在修改数据库的结构。表FinancialInstitution的几列内容必须转移到表Person中。FinancialInstitution通过外键链接到“人”。每个金融机构都需要其相应人员的ID。因此,对于在Person中插入的每个新行,此新行的ID(IDENTITY)必须复制回FinancialInstitution的相应行中。 显而易见的方法是迭代的T-SQL代码。但是我有兴趣知道是否只有基于集合的操作才有可能做到这一点。 我以为这样的请求的内部层是这样的: INSERT INTO Person (Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1) OUTPUT inserted.Id, FinancialInstitution.Id SELECT Id, Street, Number, City, [State], PostCode, CountryId, PhoneNumber, Fax, Email FROM FinancialInstitution; 不幸的是,看来OUTPUT无法以这种方式建立关联...

4
如何将表中的最大行数限制为仅1
我的SQL Server数据库中有一个配置表,该表只能有一行。为了帮助将来的开发人员理解这一点,我想防止添加多行数据。我选择为此使用触发器,如下所示... ALTER TRIGGER OnlyOneConfigRow ON [dbo].[Configuration] INSTEAD OF INSERT AS BEGIN DECLARE @HasZeroRows BIT; SELECT @HasZeroRows = CASE WHEN COUNT (Id) = 0 THEN 1 ELSE 0 END FROM [dbo].[Configuration]; IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0 BEGIN RAISERROR ('You should not add more than one row …

1
依靠INSERT的OUTPUT子句的顺序是否安全?
给定此表: CREATE TABLE dbo.Target ( TargetId int identity(1, 1) NOT NULL, Color varchar(20) NOT NULL, Action varchar(10) NOT NULL, -- of course this should be normalized Code int NOT NULL, CONSTRAINT PK_Target PRIMARY KEY CLUSTERED (TargetId) ); 在两种略有不同的方案中,我想插入行并从标识列返回值。 场景1 INSERT dbo.Target (Color, Action, Code) OUTPUT inserted.TargetId SELECT t.Color, t.Action, t.Code …


1
单行INSERT…SELECT比单独的SELECT慢得多
给定以下堆表,该堆表具有从1到400编号的400行: DROP TABLE IF EXISTS dbo.N; GO SELECT SV.number INTO dbo.N FROM master.dbo.spt_values AS SV WHERE SV.[type] = N'P' AND SV.number BETWEEN 1 AND 400; 以及以下设置: SET NOCOUNT ON; SET STATISTICS IO, TIME OFF; SET STATISTICS XML OFF; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 以下SELECT语句将在6秒钟左右完成(demo,plan): DECLARE @n integer = 400; …

2
插入期间磁盘空间已满,会发生什么?
今天,我发现存储我的数据库的硬盘驱动器已满。这是以前发生的,通常原因很明显。通常会有一个错误的查询,这会导致大量的溢出到tempdb,直到磁盘装满为止。这次不太清楚发生了什么,因为tempdb不是驱动器满载的原因,而是数据库本身。 事实: 通常的数据库大小约为55 GB,后来增加到605 GB。 日志文件大小正常,数据文件很大。 数据文件具有85%的可用空间(我将其解释为“空气”:已使用但已释放的空间。SQLServer分配后将保留所有空间)。 Tempdb大小正常。 我发现了可能的原因;有一个查询选择了太多行的查询(错误的联接会导致选择110亿行,预计会有几十万行)。这是一个SELECT INTO查询,使我想知道是否可能发生以下情况: SELECT INTO执行 目标表已创建 数据被选择时插入 磁盘已满,导致插入失败 SELECT INTO被中止并回滚 回滚可以释放空间(已插入的数据将被删除),但是SQL Server不会释放释放的空间。 但是,在这种情况下,我不希望由创建的表SELECT INTO仍然存在,应该通过回滚将其删除。我测试了这个: BEGIN TRANSACTION SELECT T.x INTO TMP.test FROM (VALUES(1))T(x) ROLLBACK SELECT * FROM TMP.test 结果是: (1 row affected) Msg 208, Level 16, State 1, Line 8 Invalid object name 'TMP.test'. …

2
在INSERT语句的OUTPUT INTO子句中使用源列(SQL Server)
我正在编写一个批处理插入语句,并且想使用一个临时表来跟踪插入的ID,而不是自己遍历项目并为每个插入的行调用SCOPE_IDENTITY()。 需要插入的数据具有(临时)ID将其链接到也应该插入另一个表中的其他数据,因此我需要实际ID和临时ID的交叉引用。 这是到目前为止我所拥有的一个例子: -- The existing table DECLARE @MyTable TABLE (ID INT IDENTITY(1,1), [Name] NVARCHAR(MAX)); -- My data I want to insert DECLARE @MyInsertData TABLE (ID INT, [Name] NVARCHAR(MAX)); INSERT INTO @MyInsertData ( ID,Name) VALUES ( -1 , 'bla'),(-2,'test'),(-3,'last'); DECLARE @MyCrossRef TABLE ([NewId] INT, OldId INT); INSERT INTO @MyTable ( …

1
在INSERT上使用WITH TABLOCK的好处
在某些情况下,INSERT INTO <tablename> (WITH TABLOCK)由于记录最少,因此执行操作会更快。这些情况包括将数据库包含在BULK_LOGGED恢复模型中。 当数据库(tempdb)使用恢复模型时,在空表上使用WITH TABLOCKon 还有其他潜在的性能优势吗?INSERTSIMPLE 我正在使用SQL Server 2012 Standard Edition。 我的用例是使用来创建然后立即在存储过程中填充临时表INSERT...SELECT,该表可能包含多达几百万行。我尝试避免这种tempdb滥用,但是有时是需要的。 我正在尝试建立一个需要的案例TABLOCK。似乎它不会伤害任何东西,并且可能会有好处。我试图弄清楚是否有足够的潜在优势可以将其添加到我们整个代码库中的任何位置,我敢肯定没有其他进程要写到表中。 我通常将其插入具有群集PK的新创建的本地临时表中,但有时会使用堆。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.