AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-273600

Yano_of_Queenscastle's questions

Martin Hope
Yano_of_Queenscastle
Asked: 2025-01-29 15:45:56 +0800 CST

创建存储过程时,定义前的注释是否总是保留?

  • 11

当我在CREATE PROCEDURE命令前写一些注释时,这些注释似乎被保留为过程定义的一部分。

例如,当我创建这样的过程时

/*Comment header*/
CREATE OR ALTER PROCEDURE example_procedure
AS 
SELECT 1 AS Id

被/*Comment header*/存储为定义的一部分。

小提琴

这是有记录的行为吗?我总能依赖它吗?还是这只是一些不可靠的 SQL Server 怪癖?

我的天真理解是,过程定义以CREATE关键字开头,因此我犹豫是否要依赖违背我的直觉的行为。

sql-server
  • 1 个回答
  • 599 Views
Martin Hope
Yano_of_Queenscastle
Asked: 2025-01-10 08:18:11 +0800 CST

为什么是 BIT 而不是 BOOLEAN?

  • 20

BITSQL Server 使用数据类型而不是有什么意义BOOLEAN吗?这只是一种调用相同事物的奇怪方式,还是存在一些微妙的概念差异?

关于数据类型的文档BIT提及:

位数据类型可用于存储布尔值。

这似乎表明,它们实际上并不是一回事。

我知道[MS 称之为布尔值的东西]和[MS 称之为位的东西]是不同的,但从程序员的角度来看,bit这是 T-SQL 语言提供的柏拉图式概念的最佳近似值boolean。我很难相信这只是偶然事件而不是故意的。仅接受 0 和 1 的数字数据类型似乎不适用于其他用途。

sql-server
  • 1 个回答
  • 2935 Views
Martin Hope
Yano_of_Queenscastle
Asked: 2024-11-24 15:51:20 +0800 CST

即使递归分配单行,递归变量分配是否不好?

  • 6

据记录,递归变量赋值(像这样↓↓↓↓)有时会返回不正确的结果:

SELECT @var = @var + [Name]
FROM dbo.People
...

但即使在我确信只返回一行的情况下这是否适用?

示例(小提琴):

CREATE TABLE dbo.People
(
  Id INT IDENTITY PRIMARY KEY,
  [Name] varchar(50) NOT NULL
);

INSERT INTO dbo.People([Name]) VALUES ('Bob');

DECLARE @var varchar(50) = '';


/*Is this bad even if the query always returns only one row?*/
SELECT @var = @var + [Name]
FROM dbo.People
WHERE Id = 1;

SELECT [@var] = @var;

文档说“在这种情况下,不能保证@Var会逐行更新。 ”这(对我来说)表明单行选择应该没问题,对吗?

另一个可能想要使用它的例子是计算一些聚合值并将它们添加到某个地方:

SELECT @Total = @Total + SUM(InvoiceTotal) /*single row, aggregate of several values*/
FROM dbo.Invoice
WHERE ...;
/*Notice no GROUP BY*/
sql-server
  • 1 个回答
  • 30 Views
Martin Hope
Yano_of_Queenscastle
Asked: 2024-05-22 16:57:40 +0800 CST

告诉 SQL Server 移动备份文件

  • 5

我将一些备份文件移到了新位置。但是,SQL Server 似乎认为它们仍在原来的位置。(也就是说,当我使用 SSMS 还原数据库向导时,它仍然使用旧位置提出还原计划。)

有没有办法移动文件以便 SQL Server 收到有关通知?

sql-server
  • 1 个回答
  • 76 Views
Martin Hope
Yano_of_Queenscastle
Asked: 2024-02-16 03:55:40 +0800 CST

SQL Server:最大内存与最小内存相同吗?

  • 12

我目前正在浏览《Pro SQL Server 2019 管理:现代 DBA 指南》,发现一件事让我有些困惑。

在第 5 章:配置实例中,有关最小和最大服务器内存的部分(第 139-140 页)说:

在许多环境中,您可能希望为最小和最大服务器内存提供相同的值。这将避免 SQL Server 动态管理其保留的内存量的开销。

但是,如果您有多个实例,则动态内存管理可能会有所帮助,以便在任何给定时间具有最重工作负载的实例可以消耗最多的资源。

...假设您有一个实例并且没有其他应用程序(例如 SSIS 包)在服务器上运行,您通常会将最小和最大内存设置设置为

  • 内存 - 2 GB
  • (内存/8)* 7

然而,“为最小和最大服务器内存提供相同的值”的建议与文档相矛盾,文档说:

不建议将最大服务器内存 (MB) 和最小服务器内存 (MB) 设置为相同或接近相同的值。

在什么情况下最好将最大服务器内存和最小服务器内存设置为相同的值?

或者我对建议有什么误解?

sql-server
  • 1 个回答
  • 675 Views
Martin Hope
Yano_of_Queenscastle
Asked: 2024-01-03 21:07:04 +0800 CST

sys.dm_db_index_usage_stats 中的 system_seeks 是什么?

  • 8

系统视图sys.dm_db_index_usage_stats有几个列反映系统查询对索引的使用情况。但是,这是什么意思?为什么系统要查询我的表?

该文档不是特别有帮助:

栏目名称 数据类型 描述
系统搜索 大整数 系统查询的查找次数。
系统扫描 大整数 系统查询的扫描次数。
系统查找 大整数 系统查询的查找次数。
系统升级 大整数 系统查询的更新次数。
sql-server
  • 2 个回答
  • 237 Views
Martin Hope
Yano_of_Queenscastle
Asked: 2023-12-20 19:13:19 +0800 CST

SQL Server 如何优化 Hierarchyid::IsDescendantOf() 上的 JOIN?

  • 11

我有具有树结构的表(由hierarchyid列定义),我想选择特定记录的所有后代。为此,我正在使用hiearchyid.IsDescendantOf()方法。

我预计,由于我不进行简单的比较,但我正在执行操作(在本例中我调用该IsDescendantOf()方法),那么我将得到一些带有索引扫描等的可怕执行计划。

然而,SQL Server 将其优化为漂亮的小索引查找。

执行计划

我很困惑为什么以及如何。

CLR 类型上的调用方法通常会被优化吗?我假设 SQL Server 将 CLR 类型视为不透明的黑匣子,因此无法发挥其魔力。(因为它也无法在本机 SQL 函数上执行此操作。)

或者这仅适用于该特定方法?(由于这些hieararchyid值是按深度优先排序的,因此我只需通过比较就可以获得类似的结果。)

演示:

CREATE TABLE dbo.HierarchyExample (
    Id INT PRIMARY KEY,
    Hieararchy HIERARCHYID NOT NULL
);

INSERT INTO dbo.HierarchyExample(Id, Hieararchy)
VALUES
(1,  hierarchyid::Parse('/1/')),
(2,  hierarchyid::Parse('/1/1/')),
(3,  hierarchyid::Parse('/1/2/')),
(4,  hierarchyid::Parse('/1/3/')),
(5,  hierarchyid::Parse('/1/3/1/')),
(6,  hierarchyid::Parse('/1/3/2/')),
(7,  hierarchyid::Parse('/1/3/3/')),
(8,  hierarchyid::Parse('/1/4/')),
(9,  hierarchyid::Parse('/1/4/1/')),
(10, hierarchyid::Parse('/1/4/2/'));

CREATE INDEX IX_HierarchyExample_Hierarchy 
ON dbo.HierarchyExample (Hieararchy);

SELECT descendant.*
FROM HierarchyExample ancestor
    INNER JOIN HierarchyExample descendant
        ON descendant.Hieararchy.IsDescendantOf(ancestor.Hieararchy) = 1
WHERE ancestor.Id = 1

DROP TABLE IF EXISTS dbo.HierarchyExample;

执行计划

小提琴

sql-server
  • 1 个回答
  • 407 Views
Martin Hope
Yano_of_Queenscastle
Asked: 2023-05-24 16:31:17 +0800 CST

为什么批量引用不存在的列会彻底失败?

  • 7

我试图理解这种奇怪的行为。

  1. 这批选择1,然后失败,因为表不存在。这就说得通了。
SELECT 1;

SELECT  1
FROM NonexistentTable;
  1. 如果我正在尝试编写万无一失的脚本,我或许可以先检查表是否存在。这会选择 1 并在不引发任何错误的情况下完成。到目前为止,一切都很好。
SELECT 1;

IF EXISTS (
    SELECT 1
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'NonExistentTable'
)
BEGIN
    SELECT 1
    FROM NonExistentTable;
END
  1. 这批选择 1,然后失败,因为过程不存在。这是合理的。
SELECT 1;

EXECUTE sp_nonexisting_procedure;
  1. 该批处理拒绝直接执行,这与之前观察到的情况不一致。为什么?
SELECT 1;

SELECT NonexistentColumn
FROM sys.databases;
  1. 在脚本中更令人不安,我在其中明确尝试确定该列的存在。让我们为实验创建表:
CREATE TABLE ExistingTable(Id INT, [Name] NVARCHAR(255));
GO

然后运行这个↓↓↓↓。这完全失败了,甚至没有选择 1 。

SELECT 1;

IF EXISTS (
    SELECT 1
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'ExistingTable'
        AND COLUMN_NAME = 'NonexistingColumn'
)
BEGIN
    
    SELECT NonexistingColumn
    FROM ExistingTable;

END
GO

为什么在发送查询后立即检查列的存在,甚至没有尝试先执行查询的有效部分?

让我更加困惑的是,只有当执行到达时才会检查表。(天真地,我希望表格更重要,因此得到更严格/更早的检查。)

sql-server
  • 1 个回答
  • 50 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve