小编MDC*_*CCL的帖子

UNION ALL w/ MINUS

为什么:

select 1 FROM DUAL 
UNION ALL
select 1 FROM DUAL
MINUS
SELECT 2 FROM DUAL
Run Code Online (Sandbox Code Playgroud)

在 Oracle 中只返回单行1而不是 2 行1

oracle minus

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

PRIMARY KEY 约束(带有 NONCLUSTERED INDEX)可以只检查某些值吗?

我可以设置一个(逻辑)PRIMARY KEY 约束,由(物理)NONCLUSTERED INDEX 提供服务,以便它只检查相关表中受约束和索引列另一列的某些值?

并且,如果是这样,该列是否可以建立为从其他表引用的 FOREIGN KEY 约束?

我试图基本上看看我是否可以从表中删除某些行而不从表中删除这些行,但仍然强制执行关系,例如:

  • IDs > 1000, 或者
  • CreatedDateTime > RemovalDate.

例如,你可以有这样的约束:

ALTER TABLE MyTable WITH NOCHECK ADD 
    CONSTRAINT PK_MyTable CHECK (Id > 1000)
Run Code Online (Sandbox Code Playgroud)

但是您将如何将此列设置为用 NONCLUSTERED INDEX 固定的 PRIMARY KEY 呢?

我可以做类似以下定义的事情吗:

ALTER TABLE MyTable WITH NOCHECK ADD 
    CONSTRAINT PK_MyTable CHECK (CreatedOn > '01/01/2010')
Run Code Online (Sandbox Code Playgroud)

但是对于名为Id?的列有一个 INDEX

sql-server-2008 database-design sql-server nonclustered-index check-constraints

3
推荐指数
2
解决办法
772
查看次数

如何比较两个不同 VARCHAR 列中的字符串?

我需要一种方法来比较两varchar列的内容,命名fistnamelastname相应,如果内容存在于 中firstname,则将其从lastname. 理想情况下,我想在没有更新查询的情况下执行此操作,但如果这是实现它的唯一方法,那么我可以走那条路。

这是示例 DDL 和 DML:

Declare @BadData Table
(
    firstname varchar(500)
    ,lastname varchar(500)
)

Insert Into @BadData (firstname, lastname) Values
('Bridget Jones', 'Jones, III'), ('Butch', 'Jones'), ('Key West', 'West')
,('Bob Marly', 'Junior')

Select * From @BadData
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果集:

firstname       lastname
-------------   ----------
Bridget Jones   Jones, III
Butch           Jones
Key West        West
Bob Marly       Junior
Run Code Online (Sandbox Code Playgroud)

我想要的结果集是:

firstname       lastname
-------------   --------
Bridget Jones   , III
Butch   Jones
Key West    
Bob Marly …
Run Code Online (Sandbox Code Playgroud)

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

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

如何监控 SQL Server 中的事务日志使用情况?

我想监控事务日志的使用情况,涉及以下所有方面:

  • 什么 Task\Job\Query 使它填充驱动器\文件。

  • 日志文件使用百分比。

  • 交易发生的时间。

任何经过测试的相关方法都会有所帮助。

sql-server transaction-log sql-server-2014

3
推荐指数
2
解决办法
7791
查看次数

非唯一聚集索引管理

我最近被指派管理 SQL Server 2016 中的数据库,我发现数据库中有许多表具有非唯一聚集索引,导致非聚集主键索引。

我知道上述显然是允许的,但并不理想(特别是对于大表),也许在某些情况下,这是有道理的,但此类表的数量告诉我,这更像是粗心的表定义的结果。

例如,一个名为的表Transaction将有一个带有以下键的聚集索引:date, is_deleted. 此外,该表将在名为 的列上有一个非聚集主键id

现在,其中一些表非常大,并且上面有许多外键引用,所以我想出了以下步骤,在 Aaron 在此线程中的回答的帮助下更改所有这些表无法删除非 PK 索引,因为它是在外键约束中引用

  1. 删除表的聚集索引
  2. 删除所有引用该表的外键约束
  3. 删除表的当前主键约束
  4. 使用id列创建主键集群约束
  5. 创建之前删除的所有外键约束
  6. 可选 - 创建以前的聚集索引作为非聚集索引

我知道对于大表,我需要找到一个维护窗口来执行更改,但是您是否发现上述解决方案有任何我没有想到的问题或陷阱?这种方法会导致非聚集索引的其余部分出现碎片吗?

涉及很多表,我想确保我不会触发任何副作用。

performance index sql-server fragmentation sql-server-2016

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

修改数据库表的列名以适应我的应用程序的技术限制?

我在一家公司工作,该公司处理由 3rd 方提供的巨大(比如说数百 GB)数据库。此外,我必须从公司用来加载和可视化数据的软件(即应用程序)中创建数据库连接。

问题

数据库的列名字符长度为 32+,但软件应用程序仅支持最多 31 的列名长度。因此无法加载包含列的这些表,我无法真正使用数据库。

问题

我应该在每次需要时接触数据库并缩短列名(用于更新等),还是应该推动公司使用支持更长列名的软件?

一方面,我认为触摸原始数据非常丑陋,另一方面,公司已经购买的应用程序许可证非常昂贵,仅切换软件可能不是那么受欢迎的举动......

还是视具体情况而定?受影响的列数或软件价格是否与我必须做出的决定有任何关联?

或者有更好的解决方案吗?

database-design

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

授予对对象的 SELECT 权限

我不确定这是否是一个奇怪的问题,所以请让我知道我在下面描述的内容是否可行。

我们有一个服务器,它是由其他人配置的,我们没有人“添加到其中”。

截至目前,我只sa登录了所述服务器。

我正在通过

SQLCMD -E -S ".\SQLServer"
Run Code Online (Sandbox Code Playgroud)

然后通过

SELECT name FROM sys.syslogins
Run Code Online (Sandbox Code Playgroud)

输出是

sa
Run Code Online (Sandbox Code Playgroud)

我只想对表运行 SELECT 语句以查看值。

有什么我可以做的吗?

我曾尝试 DB 更改和可信赖,但由于我根本不是会员,因此我的访问被拒绝。

我只需要运行 SELECT 语句。

security sql-server permissions logins sql-server-2014

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

服务器重启时扩展事件会话文件被截断

我创建了一个扩展事件会话来捕获登录和注销信息。会话设置为将事件存储到文件中。我知道使用事件文件(而不是环形缓冲区)的优点之一是事件历史记录将在重新启动时保持不变。但是,当 SQL Server 重新启动并且历史记录丢失时,似乎会创建一个新的事件文件。这是预期的吗?如果是这样,使用文件而不是环形缓冲区的优势是什么?

sql-server extended-events sql-server-2014

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

使用 T-SQL,是否可以拆分结果集或表,然后插入到两个不同的临时表中?

我有一张保存付款数据的表。我想将以拒绝状态结束的订单插入#tmp_Declined。然后,我想将最初被拒绝但在使用替代付款方式时获得授权的付款插入 #tmp_Authorized。

我可以使用 2 个 select into 语句来做到这一点,其中 where 子句略有不同,但使用相同的基表。

我考虑了一个类似下面的例子:

select *
into #tmp_Declined
from Payments

except

select *
from Payments 
where WasOrginallyDeclined = 1 
and MostRecentPaymentAccepted = 1 
Run Code Online (Sandbox Code Playgroud)

这种方法虽然仍然会在某个时间填充一个临时表。是否有保留字或查询“技巧”将插入#tmpA 中满足条件,然后插入#tmpB 中未插入#tmpA 中的任何内容?

我希望能够通过一个事务写入 2 个表。

sql-server t-sql except

3
推荐指数
2
解决办法
284
查看次数

处理想要使用 XP_CMDSHELL 到 BCP OUT 的开发人员的最佳实践

这不是技术问题。我想知道在开发人员希望对所有事情都拥有 SA 的地方使用的最佳实践。

最近的事件是:

开发人员希望使用 BCP OUT 将数据快速导出到 txt 文件。

我应该怎么想?我应该说“为什么你需要这么快?”

我确信有很多替代方法可以将数据导出到 .TXT 文件。它们可能会更慢,但它可以完成工作。

我们在这里不使用 Windows 登录,只使用登录,所以我无法创建代理帐户(我正在阅读有关此的内容)。

注意:他们使用 Delphi 编写应用程序代码。

sql-server-2008 sql-server

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