我只是在研究 3NF 和 BCNF,然后遇到一个声明:
3NF 确保无损分解,而 BCNF 则不然。
我们如何使用 BCNF 和 3NF 的基本定义来验证这一点?
我定义了一个名为 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) 我有一个问题我很困惑。我对数据库也很陌生,所以这个问题可能很基本。
例如,在我的工作中,我们使用 SSMS 连接到服务器的数据库。
从 SSMS 连接时,我们输入 ( server_name\instance )。比如说PC100\SQLexpress。
但对于某些人来说,只输入服务器,而不输入实例。这是如何运作的?我认为为了连接,我们总是需要在服务器名称后输入一个实例?
例如,我们需要一些PC100\SQLexpress连接到服务器的数据库。然后对于其他的我们只需要输入PC200连接,而不需要输入实例。
谁能解释一下吗?
我需要将来自客户和公司的地址存储到具有相同列的不同表中。我想知道使用相同的插入语句的最佳方法是什么,但只能通过更改表的名称。
例子:
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) 我需要根据文档在我的表中的 JSON 列上添加索引我正在执行类似于下面的查询。
CREATE INDEX idxgin ON api USING gin (jdoc);
我收到以下错误:
错误:数据类型 json 没有用于访问方法“gin”的默认运算符类
提示:您必须为索引指定运算符类或为数据类型定义默认运算符类。
这是文档的链接。
SQL Server 上发生未指定的错误。连接可能已被服务器终止。
这是我收到的错误。(执行作业时)
[SQLSTATE HY000](错误 0)无法继续执行,因为会话处于终止状态。
[SQLSTATE HY000](错误 596)。步骤失败。
我以为我读到NLS_CHARACTERSET了数据库NLS_LANG的编码和客户端的编码。那是对的吗?
这是否意味着两种编码可以不同?
在其他一些文档中,我读到NLS_LANG是由NLS_CHARACTERSET. 哪个断言是正确的?
我试图在 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:在第 …
我想将两个值与用户的平均评分进行比较
select * from dt_tutor_comments where avg(rating_value) BETWEEN 1 and 2 GROUP by u.id
Run Code Online (Sandbox Code Playgroud) 下面的代码是一个动态 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
当我尝试使用以下命令恢复我的数据库时
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——遗憾的是我的公司没有雇用任何人——而且我不知道从哪里开始。
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,但我最初的尝试毫无结果,所以也许有人已经这样做了?