小编And*_*y M的帖子

你如何重构一个丑陋的过程/查询?

我继承了一个数据库,其中包含几个 1000-1500 行长的过程,复杂的嵌套子选择在某些地方深达 7 或 8 层。为了我自己的理智,我迫切需要重构它们,但是我怎么能以任何程度的信心开始这样做呢?

如果这是 .Net,我会编写单元测试 - 您是否推荐类似的方法?

stored-procedures query-refactor

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

Like 谓词只匹配整个单词

我有一个 SQLite 数据库,其中有一个名为minecraft.

+----+----------------------+
| id |         name         |
+----+----------------------+
|  1 | Pocket Mine MP       |
|  2 | Open Computers       |
|  3 | hubot minecraft skin |
|  4 | Terasology           |
|  5 | msm                  |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)

我需要找到所有在其“名称”字段中包含“e”和“o”的记录。这是我的选择查询:

select * from minecraft where name like '%e%o%'
Run Code Online (Sandbox Code Playgroud)

以下是上述查询的结果:

+----+----------------+
| id |      name      |
+----+----------------+
|  2 | Open Computers |
|  4 | Terasology     |
+----+----------------+
Run Code Online (Sandbox Code Playgroud)

问题是 Like 谓词匹配整个值,而不是单词。不应该匹配 id = 2 的行,因为所有条件都没有出现在一个单词中('e' 出现在第一个单词中,'o' …

sqlite select like

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

将 int 转换为 RGB 或十六进制颜色

我正在使用一个数据库,其中颜色存储为整数。由于某些未知原因,它们实际上是负整数。

现在,我需要在 CSSbackground-color属性中使用它们,该属性接受颜色名称、RGB 颜色或十六进制颜色。问题是我不知道如何正确转换它们以获得可接受的字符串值。

我尝试使用转换-65280CONVERT(VARBINARY(8), abs(S.Color))我正在获取0x0000FF00. 但是,我需要的输出是#00ff00rgb(0,255,0)。我怎样才能做到这一点?

sql-server t-sql type-conversion

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

查询以获取每个组的队列位置

我有一个包含以下示例数据的队列表:

id  company location
1   acme    new york
2   acme    philadelphia
3   genco   st.louis
4   genco   san diego
5   genco   san francisco
6   acme    miami
Run Code Online (Sandbox Code Playgroud)

我想查询每个公司组的队列位置以显示每个公司的排队位置(假设 acme 在 500 Genco 开始之前有 1,000 行,然后在 Genco 记录过程之后 acme 有 5,000 行)。我想要的结果如下所示:

queuePositionId company
1    acme
3    genco
6    acme
Run Code Online (Sandbox Code Playgroud)

我玩过排名和分组,但事实上一个公司组可以在队列中的任何地方多次出现,这一直在扰乱我的聚合。我也尝试过,dense_rank但无法弄清楚顺序。有任何想法吗?

sql-server t-sql sql-server-2008-r2 group-by gaps-and-islands

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

将数据从 Excel 导出/导入到带有查询的表中

我是一个对学习和实施我学到的东西感兴趣的新手。这些天我一直在研究 SQL Server 2014,我很喜欢它。

我遇到过一些场景,我会将一个包含 70,000 行和大约 10-12 列的 Excel 文档导入 SQL Server(一个表),利用它来比较/插入/修改其他表中的现有数据。我目前正在使用 GUI 中可用的手动功能(右键单击 >> 任务 >> 导入)在需要时进行导入和导出;但是,我的一位同事告诉我,同样的过程也可以通过脚本/查询来完成。

有人可以让我知道编写查询以将 XLS、XLSX、CSV 格式文件导入表的正确方法是什么吗?

PS:我也试着读一些职位约OPENDATASOURCEOPENROWSET在那里我已经没有成功,始终得到了一些错误,对此我没有任何线索。所以,想看看是否还有其他方法,并热衷于学习他们的程序。

sql-server t-sql sql-server-2008-r2 sql-server-2014

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

插入依赖读取时处理并发

[短的]

我有以下情况:用户A尝试将数据DA插入数据库。要检查是否A允许用户插入DA,我需要运行查询并进行一些计算。我遇到的问题是,当我进行计算时,另一个用户 ( B) 也尝试将数据插入到数据库中。现在,假设两个用户在插入新数据之前都读取了计算所需的信息,那么他们可能都被清除插入,而来自用户的数据A将禁止用户B插入,从而使数据库处于不一致状态。

如何在 Azure SQL 数据库 V12 中解决这种并发问题?

[详细的]

用户插入的数据是时间间隔的开始和结束,例如start: 6:00, end: 7:00。要求是不能有时间间隔重叠。这意味着区间start: 6:00, end: 9:00start: 5:00, end: 6:00不能同时存在。目前我正在做的是检查是否有任何行与用户尝试使用以下查询插入的新间隔重叠:

SELECT COUNT(*) FROM [Table1] WHERE Start <= attempEnd && End >= attemptStart
Run Code Online (Sandbox Code Playgroud)

现在,问题是多个用户可能试图插入一个间隔,而这些新间隔可能相互重叠。但是,在上面的查询运行时,此信息可能不可用,这会导致插入重叠间隔。

如何在 Azure SQL 数据库 V12 中解决这种并发问题?

sql-server concurrency azure-sql-database

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

双反轴?

我需要取消旋转下表,以便输出如下图所示。

在此处输入图片说明

这是否需要我对数据集执行两次 UNPIVOT,或者我可以通过使用一次 UNPIVOT 并指定所有可用的 Month 和 Value 列来完成我的预期输出吗?

我的脚本应该类似于以下内容来完成我需要的吗?

 Select ID, Name, Age, Gender,Month,Value
    FROM
    (Select ID, Name, Age, Gender,Month1,Month2,Month3,Month4,Value1,Value2,Value3,Value4
    FROM MyTable
    ) as cp
    UNPIVOT 
    (
      Month FOR Months IN (Month1, Month2, Month3,Month4),
      Value for Values IN (Value1,Value2,Value3,Value4)
    ) AS up;
Run Code Online (Sandbox Code Playgroud)

sql-server unpivot

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

如何在不使用数据透视表和逆透视表的情况下从 SQL Server 2008 R2 中的行获取中值

创建表脚本

create table temp 
(
    id int identity(1,1),
    a decimal(6,2),
    b decimal(6,2),
    c decimal(6,2),
    d decimal(6,2),
    e decimal(6,2),
    f decimal(6,2),
    g decimal(6,2),
    h decimal(6,2),
    i decimal(6,2),
    j decimal(6,2),
    k decimal(6,2),
    l decimal(6,2),
    m decimal(6,2),
    n decimal(6,2),
    o decimal(6,2),
    p decimal(6,2),
    q decimal(6,2),
    r decimal(6,2),
    s decimal(6,2),
    t decimal(6,2),
    u decimal(6,2)
)
Run Code Online (Sandbox Code Playgroud)

插入脚本

insert into temp
    (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u)
values
    (1,5,6,7,8,2,6,3,4,5,2,1,6,5,7,8,2,7,6,2,8)

insert into temp
    (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u)
values
    (1,5,6,7,8,2,2,3,2,4,2,1,4,5,9,8,2,7,6,2,8)
Run Code Online (Sandbox Code Playgroud)

预期结果

Median
======
first row  - 5.00
second row - 4.00 
Run Code Online (Sandbox Code Playgroud)

非工作解决方案

我尝试了以下查询,该查询在 SQL Server 2014 …

sql-server sql-server-2008-r2 compatibility-level

6
推荐指数
2
解决办法
349
查看次数

判断用户自定义类型是否为ENUM

有没有办法确定 PostgreSQL 中的用户定义类型是否是 ENUM?

基本上我们有以下几点:

CREATE TYPE foo AS ENUM (
  'Sometimes',
  'You',
  'Wanna',
  'Go',
  'Where Everybody Knows Your Name'
);
Run Code Online (Sandbox Code Playgroud)

通过以下方式实例化的表:

CREATE TABLE bar (
  lyrics foo DEFAULT 'Wanna'::foo
);
Run Code Online (Sandbox Code Playgroud)

我能够foo从列中确定的类型lyrics,但是,我无法找到确定是否foo是 ENUM 的方法。

对于上下文,我需要此信息以编程方式获取foo给定lyrics.

postgresql metadata enum user-defined-type

6
推荐指数
2
解决办法
737
查看次数

IndexOptimize - 配置

我们最近切换到 Ola Hallengren 的维护脚本并自动将MaintenanceSolution.sql部署到我们客户的 SQL Server 实例。

我们需要为作业IndexOptimize - USER_DATABASES设置这些参数:

  • @UpdateStatistics = 'ALL'

  • @OnlyModifiedStatistics = 'Y'

我看到这些参数存在于MaintenanceSolution.sql 中

在此处输入图片说明

在我将MaintenanceSolution.sql 中上述参数的值更改为

@UpdateStatistics nvarchar(max) = 'ALL'

@OnlyModifiedStatistics nvarchar(max) = 'Y'
Run Code Online (Sandbox Code Playgroud)

然后执行,我在Job Step 属性 - IndexOptimize - USER_DATABASES 中没有看到@UpdateStatistics = 'ALL'@OnlyModifiedStatistics = 'Y'添加:

在此处输入图片说明

我的问题是:

  1. 为什么“统计”选项没有出现在作业的命令中?
  2. 为此直接编辑MaintenanceSolution.sql有错吗?
  3. 有没有办法使用查询将这些参数添加到作业中?

sql-server maintenance ola-hallengren

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