小编Mar*_*rco的帖子

无损加入3NF

我只是在研究 3NF 和 BCNF,然后遇到一个声明:

3NF 确保无损分解,而 BCNF 则不然。

我们如何使用 BCNF 和 3NF 的基本定义来验证这一点?

relational-theory

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

用破折号对字母数字值进行排序

我定义了一个名为 Inventory 的表,其中包含一个varchar(45)名为ItemNameCode. 这是表格,包含以下字母数字值。

在此处输入图片说明

我们要按字母数字排序为:

MES40
PT14
PT14-403
PT14-646-649
PT14-646-649
PT15-3-11
PT15-12-42
PT15-12-572-575
PT16-164
PT16-227
PT16-62-71
PT16-136
PT16-137
Run Code Online (Sandbox Code Playgroud)

我尝试了波纹管查询,但没有得到确切的顺序:

SELECT ItemNameCode
FROM Inventory
ORDER BY LEFT(ItemNameCode,PATINDEX('%[0-9]%',ItemNameCode)-1)
Run Code Online (Sandbox Code Playgroud)

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

2
推荐指数
1
解决办法
1478
查看次数

SSMS 如何在没有实例名称的情况下连接到服务器的数据库?

我有一个问题我很困惑。我对数据库也很陌生,所以这个问题可能很基本。

例如,在我的工作中,我们使用 SSMS 连接到服务器的数据库。

从 SSMS 连接时,我们输入 ( server_name\instance )。比如说PC100\SQLexpress

但对于某些人来说,只输入服务器,而不输入实例。这是如何运作的?我认为为了连接,我们总是需要在服务器名称后输入一个实例?

例如,我们需要一些PC100\SQLexpress连接到服务器的数据库。然后对于其他的我们只需要输入PC200连接,而不需要输入实例。

谁能解释一下吗?

instance ssms

2
推荐指数
1
解决办法
6183
查看次数

在 Oracle 上使用插入语句的最佳方法

我需要将来自客户和公司的地址存储到具有相同列的不同表中。我想知道使用相同的插入语句的最佳方法是什么,但只能通过更改表的名称。

例子:

CASE CPF
 WHEN NULL
  INSERT INTO COMPANIES_ADDRESS (ZIPCODE, STREET, NUMBER) VALUES (V_ZIPCODE, V_STREET, V_NUMBER)
 ELSE
  INSERT INTO CUSTOMERS_ADDRESS (ZIPCODE, STREET, NUMBER) VALUES (V_ZIPCODE, V_STREET, V_NUMBER)
END
Run Code Online (Sandbox Code Playgroud)

oracle plsql

2
推荐指数
1
解决办法
72
查看次数

使用 GIN 为 JSON 列建立索引

我需要根据文档在我的表中的 JSON 列上添加索引我正在执行类似于下面的查询。

CREATE INDEX idxgin ON api USING gin (jdoc);

我收到以下错误:

错误:数据类型 json 没有用于访问方法“gin”的默认运算符类
提示:您必须为索引指定运算符类或为数据类型定义默认运算符类。

这是文档的链接。

postgresql json postgresql-9.4

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

如何检查谁杀死了正在运行的作业? 如果没有生成日志

SQL Server 上发生未指定的错误。连接可能已被服务器终止。

这是我收到的错误。(执行作业时)

[SQLSTATE HY000](错误 0)无法继续执行,因为会话处于终止状态。
[SQLSTATE HY000](错误 596)。步骤失败。

sql-server jobs

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

NLS_LANG 和 NLS_CHARACTERSET

我以为我读到NLS_CHARACTERSET了数据库NLS_LANG的编码和客户端的编码。那是对的吗?

这是否意味着两种编码可以不同?

在其他一些文档中,我读到NLS_LANG是由NLS_CHARACTERSET. 哪个断言是正确的?

oracle encoding

2
推荐指数
1
解决办法
8837
查看次数

ORA-00905: 缺少关键字

我试图在 Linux 机器上的 Oracle DB 11g 上运行以下 Pl/SQL 语句,但收到错误“缺少关键字”。如果我错过了什么,请告诉我。

BEGIN

FOR X in (select * from all_tables where owner in ('owner1', 'owner2')) LOOP

EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON ' ||X.owner||'.'||X.table_name|| 'to myuser';

END LOOP;

end;
/


Error starting at line : 1 in command -
BEGIN
FOR X in (select * from all_tables where owner in ('TESTDTA', 'TESTCTL')) LOOP
EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON ' ||X.owner||'.'||X.table_name|| 'to ARCTOOLS212';
END LOOP;

end;
Run Code Online (Sandbox Code Playgroud)

错误报告

ORA-00905:缺少关键字 ORA-06512:在第 …

oracle oracle-11g-r2 linux

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

如何在 WHERE between 子句中使用 avg 表达式?

我想将两个值与用户的平均评分进行比较

select * from dt_tutor_comments where avg(rating_value) BETWEEN 1 and 2 GROUP by u.id 
Run Code Online (Sandbox Code Playgroud)

mysql

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

在开始尝试开始捕获块中删除表 - 是否有任何性能损失?

下面的代码是一个动态 sql,它将为您提供系统中所有警报的列表。

有用。

出于这个问题之外的原因,代码中有一个临时表。

这个问题与我在创建临时表之前确保临时表不存在的方式有关。

我在 try catch 块中放置了一个删除表,如下面的代码所示。

我的问题是:

  • 有没有性能损失?
  • 这样做有什么缺点吗?
  • 为什么这不被视为通常的最佳实践?

我仍然有一些服务器 sql-server-2008-r2 但大多数我的服务器是 sql server 2016。

EXEC Sp_executesql 
N'  

begin try
 drop table #tmp_sp_help_alert 
end try
begin catch
end catch

create table #tmp_sp_help_alert  (
id int null, name nvarchar(128) null,  
event_source nvarchar(100) null, 
event_category_id int null, 
event_id int null, 
message_id int null,  
severity int null, 
enabled tinyint null, 
delay_between_responses int null, 
last_occurrence_date int null, 
last_occurrence_time int null, 
last_response_date int null, 
last_response_time int null, 
notification_message nvarchar(512) null, 
include_event_description …
Run Code Online (Sandbox Code Playgroud)

sql-server dynamic-sql sql-server-2008-r2 error-handling temporary-tables

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

由于回滚卡住而无法恢复数据库

当我尝试使用以下命令恢复我的数据库时

RESTORE DATABASE MyDatabase
FROM DISK = '\path\to\my\backup.bak'
WITH REPLACE, RECOVERY
Run Code Online (Sandbox Code Playgroud)

它说

无法获得独占访问权限,因为数据库正在使用中。

经过一些谷歌搜索后,我尝试了这个:

ALTER DATABASE MyDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
RESTORE DATABASE MyDatabase
FROM DISK = '\path\to\my\backup.bak'
WITH REPLACE, RECOVERY
GO
Run Code Online (Sandbox Code Playgroud)

然而,这似乎需要很长时间,当我最终取消命令时,它告诉我

不合格的事务正在被回滚。预计回滚完成:0%。

该消息重复多次,进度始终为 0%。

我不是 DBA——遗憾的是我的公司没有雇用任何人——而且我不知道从哪里开始。

sql-server restore

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

postgres 存储过程中的 UPSERT

Postgres 已经有一种方法可以执行“upsert”,但我不喜欢发送这些长查询,我想知道它是否可以实现为一个存储过程,它将接受 json 并执行

INSERT INTO ... (keys)
  VALUES (values)
  ON CONFLICT DO UPDATE SET (setEverythingFromExcluded)
Run Code Online (Sandbox Code Playgroud)

我知道我可以以某种方式使用json_object_keysandjson_extract_path或直接使用json_each,但我最初的尝试毫无结果,所以也许有人已经这样做了?

postgresql insert update upsert

-1
推荐指数
1
解决办法
1329
查看次数