我连续有一个损坏的斑点。
我想用同一张表中的另一个斑点替换它。
我怎样才能只使用sql语句来做到这一点?(如果可能的话,不访问文件系统。)
对于给定的分区方案名称,我需要检索一组
这必须在不存在参与该方案的任何表的情况下起作用。
即通过 sys.indexes 加入将不起作用。
我认为答案在于 sys.destination_data_spaces,但尚未弄清楚与 sys.partition_range_values 的连接。
据我了解,在 MySQL/Postgres 数据库中,不能保证没有 order-by 子句的 select 语句的值顺序,因此应该任意获取行。如果是这样,那么为什么在执行此类查询时通常没有重复项?
SELECT * FROM `table` LIMIT 0,5
SELECT * FROM `table` LIMIT 5,5
SELECT * FROM `table` LIMIT 10,5
Run Code Online (Sandbox Code Playgroud)
考虑到人们只关心不获取重复项而不关心排序,这些查询使用起来是否安全?如果是,那又如何?
timestamp我用一列来指示一行是在白天还是晚上创建的。我的代码如下,但由于某种原因,我只得到“DAY”作为结果。我没有正确格式化值吗?
select record_id, rec_date,
case when date_part('hour', rec_date) between 20 and 07 then 'Night'
else 'Day' end as Indicator
from records;
Run Code Online (Sandbox Code Playgroud)
该rec_date列是一个时间戳,我可以在其中看到诸如2019-11-20 21:34:02.000000- 之类的值,它应该得到一个'Night'指标。
我在 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) 我有一个 MySQL 数据库临时表,其中包含一堆针对系统 ID 和日期(它们组合构成主键)的仪表读数。
某些条目的仪表读数为 NULL,在这种情况下,它们需要更新以具有与前一天相同的仪表读数。
还有一个“差异”列,需要有当天读数和前一天读数之间的差异。
我知道如何使用代码更新表,我想知道是否有使用 SQL 的好方法。多个查询很好(我猜在计算差异之前至少需要更新 NULL 读数)。
这是一个带有假数据的示例架构,也在这个 sqlfiddle 中:
CREATE TABLE Readings (`SystemID` INT, `ReadingDate` DATE, `Reading` INT NULL, `Diff` INT NULL, PRIMARY KEY(`SystemID`,`ReadingDate`));
INSERT INTO Readings VALUES
(1, '2021-02-01', 24, NULL),
(1, '2021-02-02', 26, NULL),
(1, '2021-02-03', 23, NULL),
(1, '2021-02-04', NULL, NULL),
(1, '2021-02-05', NULL, NULL),
(1, '2021-02-06', 28, NULL),
(1, '2021-02-07', 21, NULL),
(2, '2021-02-01', 124, NULL),
(2, '2021-02-02', 126, NULL),
(2, '2021-02-03', 123, NULL),
(2, '2021-02-04', NULL, …Run Code Online (Sandbox Code Playgroud) 在 mssql 中,如何有效地运行此查询:
select id from table where field in (gigantic list of ordered longs)
Run Code Online (Sandbox Code Playgroud)
表架构:
table:
{
id primary key
field long
} index findex (field)
Run Code Online (Sandbox Code Playgroud)
我认为这应该非常快(因为它基本上只是遍历两个有序的 long 列表)。有没有办法连续输入 ID?
我可以从控制台或使用 Linqpad/SSMS 来完成。
当前(慢)解决方案:构建许多长查询的控制台应用程序,每个查询都有 3k fieldId 参数。参数数量的限制是问题所在;如何解决它?
我创建了一个这样的序列:
CREATE SEQUENCE seq_test2
MINVALUE 0
MAXVALUE 999999999999999999999999999
START WITH 0
INCREMENT BY 1;
Run Code Online (Sandbox Code Playgroud)
这两个查询都显示数字 0:
select SEQ_TEST2.nextval from DUAL;
select SEQ_TEST2.currval from DUAL;
Run Code Online (Sandbox Code Playgroud)
我有一张桌子,你可以在这里看到:
create table STUDENT
(
st_id NUMBER,
first_name VARCHAR2(150),
last_name VARCHAR2(150)
)
Run Code Online (Sandbox Code Playgroud)
执行下面的查询后,
select t.st_id , nvl(t.st_id , seq_test2.nextval) as seq
from STUDENT t
Run Code Online (Sandbox Code Playgroud)
当列中没有空值时st_id,我得到的结果是这样的:
st_id seq
---------------
1 1
2 2
3 3
4 4
5 5
Run Code Online (Sandbox Code Playgroud)
当我插入列为 null 的行时st_id,执行上面的查询后,结果如下所示:
st_id seq
---------------
1 1
2 2
3 3
4 4 …Run Code Online (Sandbox Code Playgroud) 我想防止表中的删除、插入、更新和选择并发,因此我尝试SERIALIZABLE在转换之前使用该表,但这并没有为其他进程锁定该表!如何修复它?
我尝试过什么:
1-创建表_1
--Create Sample Table
CREATE TABLE [dbo].[Table_1](
[Number] [bigint] NOT NULL,
[Price] [bigint] NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[Number] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (1, 1000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (2, 3000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (3, 8000)
GO
Run Code Online (Sandbox Code Playgroud)
2- 查询有延迟的会话一:
--SESSION 1
SET TRANSACTION ISOLATION LEVEL …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server query concurrency sql-server-2008-r2
首先,我可以描述表的架构,但我的表本身大约是 80GB,所以我希望一些专家的眼睛可以看到可以执行的任何明显的优化。我正在进行一些基于活动的分析,以了解来自内部虚拟游戏环境的一组用户。
我有两个基表:
EventTable: Moderately big at 10GB
Activity_ID UserName ActivityStart ActivityEnd Badge
ActivityTable: Super big at 100GB
UserName ActivityTime Game1Points Game2Points
Run Code Online (Sandbox Code Playgroud)
简而言之,我正在尝试以下操作:
- For each activity in the EventTable:
- Compute the median of Game1Points, Game2Points
for two cases: for all entries in the ActivityTable
that were present since 1 hour before the activity
and for all entries stored during the activity itself
Run Code Online (Sandbox Code Playgroud)
因此,我期待的决赛桌是这样的:
ResultTable:
Activity_ID Badge Game1_Before Game1_During Game2_Before Game2_During
Run Code Online (Sandbox Code Playgroud)
这显然看起来像是CURSORs的工作,所以我首先使用这种方法编写了我的查询。它正在运行,我可以看到进度,但在阅读了这么多恐怖故事之后,我决定用基于集合的方法重写我的 200 行基于 CURSOR 的方法。这非常适用于小桌子。但是,对于我这种大小的桌子,它似乎停滞不前(或者至少我不确定应该运行多长时间)。我运行Display …
query ×10
sql-server ×5
mysql ×3
postgresql ×2
concurrency ×1
date ×1
date-format ×1
date-math ×1
insert ×1
metadata ×1
mysql-5.7 ×1
oracle ×1
partitioning ×1
plsql ×1
select ×1
sequence ×1
syntax ×1