为什么:
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?
我可以设置一个(逻辑)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
我需要一种方法来比较两varchar列的内容,命名fistname和lastname相应,如果内容存在于 中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) 我想监控事务日志的使用情况,涉及以下所有方面:
什么 Task\Job\Query 使它填充驱动器\文件。
日志文件使用百分比。
交易发生的时间。
任何经过测试的相关方法都会有所帮助。
我最近被指派管理 SQL Server 2016 中的数据库,我发现数据库中有许多表具有非唯一聚集索引,导致非聚集主键索引。
我知道上述显然是允许的,但并不理想(特别是对于大表),也许在某些情况下,这是有道理的,但此类表的数量告诉我,这更像是粗心的表定义的结果。
例如,一个名为的表Transaction将有一个带有以下键的聚集索引:date, is_deleted. 此外,该表将在名为 的列上有一个非聚集主键id。
现在,其中一些表非常大,并且上面有许多外键引用,所以我想出了以下步骤,在 Aaron 在此线程中的回答的帮助下更改所有这些表无法删除非 PK 索引,因为它是在外键约束中引用:
id列创建主键集群约束我知道对于大表,我需要找到一个维护窗口来执行更改,但是您是否发现上述解决方案有任何我没有想到的问题或陷阱?这种方法会导致非聚集索引的其余部分出现碎片吗?
涉及很多表,我想确保我不会触发任何副作用。
我在一家公司工作,该公司处理由 3rd 方提供的巨大(比如说数百 GB)数据库。此外,我必须从公司用来加载和可视化数据的软件(即应用程序)中创建数据库连接。
问题
数据库的列名字符长度为 32+,但软件应用程序仅支持最多 31 的列名长度。因此无法加载包含列的这些表,我无法真正使用数据库。
问题
我应该在每次需要时接触数据库并缩短列名(用于更新等),还是应该推动公司使用支持更长列名的软件?
一方面,我认为触摸原始数据非常丑陋,另一方面,公司已经购买的应用程序许可证非常昂贵,仅切换软件可能不是那么受欢迎的举动......
还是视具体情况而定?受影响的列数或软件价格是否与我必须做出的决定有任何关联?
或者有更好的解决方案吗?
我不确定这是否是一个奇怪的问题,所以请让我知道我在下面描述的内容是否可行。
我们有一个服务器,它是由其他人配置的,我们没有人“添加到其中”。
截至目前,我只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 语句。
我创建了一个扩展事件会话来捕获登录和注销信息。会话设置为将事件存储到文件中。我知道使用事件文件(而不是环形缓冲区)的优点之一是事件历史记录将在重新启动时保持不变。但是,当 SQL Server 重新启动并且历史记录丢失时,似乎会创建一个新的事件文件。这是预期的吗?如果是这样,使用文件而不是环形缓冲区的优势是什么?
我有一张保存付款数据的表。我想将以拒绝状态结束的订单插入#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 个表。
这不是技术问题。我想知道在开发人员希望对所有事情都拥有 SA 的地方使用的最佳实践。
最近的事件是:
开发人员希望使用 BCP OUT 将数据快速导出到 txt 文件。
我应该怎么想?我应该说“为什么你需要这么快?”
我确信有很多替代方法可以将数据导出到 .TXT 文件。它们可能会更慢,但它可以完成工作。
我们在这里不使用 Windows 登录,只使用登录,所以我无法创建代理帐户(我正在阅读有关此的内容)。
注意:他们使用 Delphi 编写应用程序代码。
sql-server ×8
t-sql ×2
except ×1
index ×1
logins ×1
minus ×1
oracle ×1
performance ×1
permissions ×1
security ×1