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-30859

Solomon Rutzky's questions

Martin Hope
Solomon Rutzky
Asked: 2020-01-30 14:33:08 +0800 CST

新的系统存储过程 sys.xp_delete_files 与 sys.xp_delete_file 有何不同?

  • 12

SQL Server 2019 引入了一个新的(未记录的)系统存储过程:

sys.xp_delete_files

这个新的扩展存储过程到底是做什么的?它与xp_delete_file多年来一直存在的有什么不同?它取代xp_delete_file吗?

sql-server sql-server-2019
  • 1 个回答
  • 4117 Views
Martin Hope
Solomon Rutzky
Asked: 2018-01-11 12:38:08 +0800 CST

如果没有卸载计划,是否可以删除 Setup Bootstrap 文件夹中的 Log 和 Update Cache 文件夹?

  • 12

我有几个版本的 SQL Server,用于测试,安装在我的笔记本电脑上(2012、2014、2016 和 2017)。前几天我注意到有一个文件夹包含跨更新(SP、CU)的文件的早期版本。在所有版本中,实际上占用了相当多的空间:

(在C:\Program Files (x86)\Microsoft SQL Server\中)

110\Setup Bootstrap\Log - 91.8 MB (818 files)
110\Setup Bootstrap\Update Cache - 608 MB (2,382 files)

(下面的所有文件夹都位于:C:\Program Files\Microsoft SQL Server\)

110\Setup Bootstrap\Log - 1.18 GB (3,715 files)
110\Setup Bootstrap\Update Cache - 9.58 GB (14,766 files)

120\Setup Bootstrap\Log - 569 MB (2,963 files)
120\Setup Bootstrap\Update Cache - 5.74 GB (12,797 files)

130\Setup Bootstrap\Log - 448 MB (2,808 files)
130\Setup Bootstrap\Update Cache - 3.84 GB (8,579 files)

140\Setup Bootstrap\Log - 84.3 MB (687 files)
140\Setup Bootstrap\Update Cache - 937 MB (1,571 Files)

这些文件夹的总数为(MB 已标准化为 GB):

Folder          GB          Files
----------     -----        ------
Log             2.35        10,991
Update Cache   20.66        40,095

TOTAL          23.01        51,086

最初我认为删除Log和Update Cache文件夹应该是安全的,但后来我认为最好先检查一下其他人是否问过这个问题,如果是,答案是什么。我找到了这篇知识库文章:

SQL Server 中更新缓存文件夹的说明

其中指出:

如果您删除此文件夹或删除其内容会怎样?

如果从该文件夹中删除了 Update Cache 文件夹或某些修补程序,则不能再卸载 SQL Server 实例的更新,然后再恢复到较早的更新版本。在这种情况下,添加/删除程序条目指向不存在的二进制文件,因此卸载过程不起作用。因此,Microsoft 强烈建议您保持文件夹及其内容的完整性。

好的。我没有降级或卸载 SP 或 CU 的计划,所以我应该没问题,对吧?好吧,还有其他参考资料,例如这个:

删除“更新缓存”文件夹是否安全?

其中有人引用了以下知识库文章:

如何还原丢失的 Windows Installer 缓存文件并解决 SQL Server 更新期间出现的问题

其中指出(强调):

安装 SQL Server 时,Windows Installer 将关键文件存储在 Windows Installer 缓存中(默认为 C:\Windows\Installer)。卸载和更新应用程序需要这些文件。

现在,这篇特定的文章似乎特定于C:\Windows\Installer文件夹,我不是在谈论从该文件夹中删除。尽管如此,由于提到了无法应用更新的可能性,我首先想要更多信息。

以前有没有人删除过这些文件夹,或者至少只是删除了它们的内容?如果是这样,是否有任何负面影响?这些文件夹只会增加。我刚刚为所有四个版本应用了“Spectre / Meltdown”补丁,总数增加了 3.65 GB 和 6,900 个文件(最终结果如上图所示)。

需要明确的是,我不是在寻找是否应该删除这些文件夹中的一个或两个;我正在寻找我是否可以删除一个或两个(除了卸载/降级的能力之外,我已经接受了这一点)。

sql-server best-practices
  • 2 个回答
  • 9805 Views
Martin Hope
Solomon Rutzky
Asked: 2017-11-01 13:27:59 +0800 CST

SQL Server / T-SQL 是否支持行继续来分解长字符串?

  • 13

我有时有一个 SQL 脚本,其中包含一个或多个超长(有时甚至是愚蠢的长)字符串。通常这些是VARBINARY代表文件/程序集的文字/常量,但有时它们是文本。

真正长字符串的主要问题是一些文本编辑器不能很好地处理它们。例如,我有一个VARBINARY在语句中使用的文字CREATE ASSEMBLY [AssemblyName] FROM 0x....,而程序集本身的大小刚刚超过 1 MB,这相当于文本文件中超过 200 万个字符,因为每个字节需要两个字符以十六进制表示法表示(例如0x1F= a1和 an F)。SQL Server Management Studio (SSMS) 不能很好地处理这个问题,并在我尝试滚动该行时挂起几秒钟。事实上,某些版本(不确定是否仍然会发生这种情况)甚至会在打开至少有一行超过一定长度的脚本时显示关于长行的警告。

第二个问题是,当在没有启用自动换行的编辑器中使用或在线发布时,它会使格式复杂化。这里的问题是水平滚动条的滑块非常窄,即使移动它一点点通常也会将非超长文本滚动到视野之外。

现在,T-SQL 不会用换行符甚至分号来终止命令(尽管从 SQL Server 2005 开始,分号是首选/推荐的)。因此,由于 SQL Server 知道如何解析每条语句以使其知道何时结束,因此似乎将长行拆分为多行,仅由newline/ carriage-return+分隔line-feed,这似乎并不合理。但这在任何一种情况下都不起作用。

PRINT 'Line1
Line2';

返回(在“消息”选项卡中):

Line1
Line2

这很有意义,因为换行符在文字/常量内。但是这样做VARBINARY也行不通。

PRINT 0x1234
5678;

给我一个错误。

sql-server t-sql
  • 1 个回答
  • 4526 Views
Martin Hope
Solomon Rutzky
Asked: 2017-09-27 10:08:26 +0800 CST

升级到 SQL Server 2017 后,错误消息 10314、级别 16、状态 11 和 SAFE 程序集

  • 3

我有一个 pre-SQL Server 2017 数据库,我将它还原到/升级到 SQL Server 2017。在这个数据库中,我有一个 SQLCLR 程序集。该程序集被标记为,SAFE因为它不执行任何需要更高级别权限的操作,并且数据库已TRUSTWORTHY禁用 / OFF。SQLCLR 函数和存储过程在迁移到 SQL Server 2017 之前按预期工作,但现在当我尝试执行其中任何一个时,我收到以下错误:

消息 10314,级别 16,状态 11,服务器 XXXXXXXXXXX,行 YYYYYY
      尝试加载程序集 ID ZZZZZ 时,Microsoft .NET Framework 中发生错误。服务器可能资源不足,或者程序集可能不受信任。再次运行查询,或查看文档以了解如何解决程序集信任问题。有关此错误的更多信息:
      System.IO.FileLoadException:无法加载文件或程序集“{assembly_name},版本=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。发生与安全有关的错误。(来自 HRESULT 的异常:0x8013150A)

我已经确认在服务器/实例上启用了 CLR 集成/SQLCLR。

sql-server errors
  • 1 个回答
  • 5552 Views
Martin Hope
Solomon Rutzky
Asked: 2017-09-05 13:37:37 +0800 CST

Linux 上的 SQL Server 在初始启动时挂起,没有错误,也没有新的/更新的 ErrorLog 文件

  • 11

我在 Linux (Ubuntu 16.04) 上使用 SQL Server 2017,Release Candidate 2 (RC2)。

当服务器启动时,SQL Server 通常也会启动。但由于某种原因,SQL Server 将不再启动。至少我无法使用sqlcmd连接到它。我现在每次都收到 ODBC 超时(“Sqlcmd:错误:Microsoft ODBC Driver 13 for SQL Server ”)错误:

Login timeout expired.  
TCP Provider: Error code 0x2749.  
A network-related or instance-specific error has occurred while establishing a
connection to SQL Server. Server is not found or not accessible. Check if instance
name is correct and if SQL Server is configured to allow remote connections.
For more information see SQL Server Books Online..

但是,当我运行时:

ps aux | grep mssql

我收到两个返回的条目,表明mssql用户正在运行该sqlservr进程。

此外,/var/opt/mssql/log/中的错误日志文件在我启动 VM(或重新启动服务)时没有时间戳匹配,该文件中也没有任何新条目。

并且,在/var/log/messages中,所有显示的是:

这是一个评估版本。评估期还剩 [141] 天。

如果我运行systemctl status mssql-server,那么我会得到以下信息:

● mssql-server.service - Microsoft SQL Server 数据库引擎
已加载:已加载(/lib/systemd/system/mssql-server.service;已启用;供应商预设:已启用)
活动:自 2017 年星期一以来失败(结果:退出代码)- 09-04 20:01:56 英国夏令时;36 秒前
文档:https
://learn.microsoft.com/en-us/sql/linux 进程:8009 ExecStart=/opt/mssql/bin/sqlservr(code=exited,status=255)
主 PID:8009(code=退出,状态=255)

Started Microsoft SQL Server Database Engine.  
This is an evaluation version.  There are [141] days left in the evaluation period.  
Stopping Microsoft SQL Server Database Engine...  
mssql-server.service: Main process exited, code=exited, status=255/n/a  
Stopped Microsoft SQL Server Database Engine.  
mssql-server.service: Unit entered failed state.  
mssql-server.service: Failed with result 'exit-code'.  
sql-server linux
  • 4 个回答
  • 5210 Views
Martin Hope
Solomon Rutzky
Asked: 2016-05-18 12:58:10 +0800 CST

空变量/参数/临时表/临时过程名称的好处或用例?

  • 6

我才发现,通过纯粹的光彩意外地,那个 SQL Server 允许您创建没有任何名称的变量、参数、表变量、临时表(本地和全局)和临时存储过程(本地和全局)!好吧,至少不是我认为的名字。意思是,您可以指定DECLARE @ INT = 5;它是有效的 T-SQL:它执行时没有错误,甚至在 SSMS 中都没有用红色波浪下划线标记(本问题末尾显示了带有完整示例列表的代码)。

鉴于数据库标识符的 MSDN 页面指出(强调我的):

有两类标识符:
常规标识符
...定界
标识符
... 常规标识符和定界标识符都必须包含1 到128 个字符。对于本地临时表,标识符最多可以包含 116 个字符。

这当然看起来不像预期的行为,我最初认为这是一个缺陷(不会导致任何错误,但似乎不是“正确”的行为)并提交了一个连接错误:Parameter, Variable, and Temporary表和过程名称/标识符可以为空。

但是,同一个 MSDN 页面还指出:

常规标识符的规则

变量、函数和存储过程的名称必须符合以下 Transact-SQL 标识符规则。

  1. 第一个字符必须是以下之一:

    • Unicode 标准 3.2 定义的字母。字母的 Unicode 定义包括从 a 到 z、从 A 到 Z 的拉丁字符,以及来自其他语言的字母字符。
    • 下划线 (_)、at 符号 (@) 或井号 (#)。

      标识符开头的某些符号在 SQL Server 中具有特殊含义。以 at 符号开头的常规标识符始终表示局部变量或参数,不能用作任何其他类型对象的名称。以数字符号开头的标识符表示临时表或过程。以双数字符号 (##) 开头的标识符表示全局临时对象。尽管数字符号或双数字符号字符可用于开始其他类型的对象的名称,但我们不推荐这种做法。

因此,可以解释为名称的 1 个字符的最低要求(从最上面引用的显示“1 到 128 个字符”的部分)可以通过简单地满足以下任一@或以下条件#:

  1. 它指出那些将是“第一个”字符,而不是某种类型的事物类型的外部指示,并且
  2. 没有任何内容说明当@或#是第一个字符时,需要2 到128 个字符。

那么,如果这种行为既不是错误也不是缺陷,那么利用这种能力有什么好处吗?是否有合法的用例可以通过执行此操作而受益(即对项目的某些功能性好处,而不仅仅是减少源代码的字符数)?

我想不出一个,除了不专业和在你搬到新雇主时为每个人留下可怕的难以管理的代码之外。

但我也可以看到一个相关的功能问题,因为在许多解析 T-SQL 对象的项目中有许多代码块。如果有人使用 RegEx 模式查找@后跟诸如 之类的(\w+)内容,那么它将跳过这些条目。

-- Local variables:
DECLARE @ INT = 99;
DECLARE @@ VARCHAR(10);
SELECT CONVERT(VARCHAR(20), @), STR(@);
SET @@ = STR(@);
SELECT @@;
GO

-- Table Variable:
DECLARE @ TABLE (Col1 INT);
INSERT INTO @ (Col1) VALUES (86);
SELECT * FROM @;
GO

-- Local Temporary Table:
CREATE TABLE # (Col2 DATETIME);
INSERT INTO # (Col2) VALUES (GETDATE());
SELECT * FROM #;
SELECT OBJECT_ID(N'tempdb..#');
GO

-- Global Temporary Stored Procedure
CREATE PROCEDURE ##  ( @ INT = 999 )
AS
SELECT @ AS [Huh?];
GO

EXEC ##;

EXEC ## 204;

DECLARE @ INT = 12345;
EXEC ## @ = @;
-- The above also work in another session on the same instance, in a different Database

SELECT * FROM tempdb.sys.parameters tsp WHERE tsp.[object_id] = OBJECT_ID(N'tempdb..##');
-- returns 1 row showing a name of just "@"

PS 我在这里、谷歌和 Microsoft Connect 上搜索过,但找不到任何对“缺失”或“空”变量名或“标识符”的引用。但是,@MartinSmith 确实指出了以下 StackOverflow 答案中使用的这种“能力”以减少代码的字符数:Building an ASCII chart of the most commonly used words in a given text。

sql-server t-sql
  • 1 个回答
  • 193 Views
Martin Hope
Solomon Rutzky
Asked: 2016-01-23 11:48:48 +0800 CST

查找签名的过程、函数、触发器、程序集以及哪些证书/非对称密钥

  • 5

我创建了一些证书(通过CREATE CERTIFICATE)和非对称密钥(通过CREATE ASYMMETRIC KEY),并使用它们对各种存储过程、用户定义函数(UDF)、触发器和程序集(通过ADD SIGNATURE)进行签名和副签名. 但现在我需要找出哪些证书和/或非对称密钥已用于签署哪些特定模块。

sql-server permissions
  • 1 个回答
  • 3799 Views
Martin Hope
Solomon Rutzky
Asked: 2015-10-09 11:47:48 +0800 CST

创建多个级别的层次结构,其中每个节点都有随机数量的子节点

  • 16

我需要创建一些涉及层次结构的测试数据。我可以让它变得简单并做几个CROSS JOINs,但这会给我一个完全统一/没有任何变化的结构。这不仅看起来乏味,而且测试数据缺乏变化有时会掩盖原本会发现的问题。所以,我想生成一个遵循这些规则的非统一层次结构:

  • 3层深
    • 级别 1 随机 5 - 20 个节点
    • 级别 2 是 1 - 10 个节点,每个级别 1 的每个节点都是随机的
    • 级别 3 是 1 - 5 个节点,每个级别 2 的每个节点都是随机的
  • 所有分支将有 3 层深。在这一点上,深度均匀性是可以的。
  • 在任何给定级别上的子节点的名称都可以有重叠(即,子节点的名称不需要在同一级别的所有节点中都是唯一的)。
  • 术语“随机”在这里定义为伪随机,而不是唯一随机。这需要提及,因为术语“随机”通常用于表示“不产生重复的给定集合的随机排序”。我接受随机 = 随机,如果 1 级每个节点的子节点数只有 4、7 和 8 个,即使在 1 级的 20 个节点中,每个节点可能分布 1-10 个子节点,那很好,因为那是随机的。
  • 尽管这可以通过嵌套WHILE循环很容易地完成,但首选是找到基于集合的方法。一般来说,生成测试数据并没有生产代码对效率的要求,但采用基于集合的方法可能更具教育意义,并有助于在未来找到基于集合的方法来解决问题。因此WHILE不排除循环,但只能在不可能使用基于集合的方法时使用。
  • 基于集合 = 理想情况下是单个查询,无论 CTE、APPLY 等如何。因此使用现有或内联数字表就可以了。使用 WHILE / CURSOR / 程序方法将不起作用。我想将部分数据暂存到临时表或表变量中很好,只要操作都是基于集合的,没有循环。但是,话虽如此,单查询方法可能会比多个查询更受青睐,除非可以证明多查询方法实际上更好。还请记住,什么构成“更好”通常是主观的;-)。还请记住,前一句中“典型地”的使用也是主观的。
  • SQL Server 的任何版本(我想是 2005 和更新版本)都可以。
  • 只有纯 T-SQL:没有那些愚蠢的 SQLCLR 东西!!至少在生成数据方面。将使用 SQLCLR 创建目录和文件。但在这里,我只专注于创造要创造的价值。
  • T-SQL 多语句 TVF 被认为是过程的,而不是基于集合的,即使在外部它们掩盖了集合中的过程方法。有时这是绝对合适的。这不是其中之一。同样,T-SQL 标量函数也是不允许的,不仅因为它们也是过程性的,而且查询优化器有时会缓存它们的值并重复它,从而导致输出不符合预期。
  • T-SQL 内联 TVF(又名 iTVF)是 okey-dokey,因为它们是基于集合的,并且实际上与 using 相同[ CROSS | OUTER ] APPLY,这在上面说明是可以的。
  • 查询的重复执行应产生与先前运行大不相同的结果。
  • 澄清更新 1:最终结果集应表示为 Level3 的每个不同节点都有一行,完整路径从 Level1 开始。这意味着 Level1 和 Level2 值必然会在一行或多行中重复,除非只有一个 Level2 节点包含一个 Level3 节点。
  • 澄清更新 2:对于具有名称或标签的每个节点,而不仅仅是一个数字,存在非常强烈的偏好。这将使生成的测试数据更有意义和更现实。

我不确定这些附加信息是否重要,但以防万一它有助于了解一些上下文,测试数据与我对这个问题的回答有关:

将 XML 文件导入 SQL Server 2012

虽然此时不相关,但生成此层次结构的最终目标是创建一个目录结构来测试递归文件系统方法。级别 1 和 2 将是目录,而级别 3 将最终成为文件名。我已经搜索了(在这里和通过谷歌)并且只找到了一个生成随机层次结构的参考:

Linux:创建随机目录/文件层次结构

这个问题(在 StackOverflow 上)实际上与期望的结果非常接近,因为它也试图创建一个用于测试的目录结构。但这个问题(和答案)集中在 Linux/Unix shell 脚本,而不是我们生活的基于集合的世界。

现在,我知道如何生成随机数据,并且已经在这样做以创建文件的内容,以便它们也可以显示变化。这里棘手的部分是每个集合中的元素数量是随机的,而不是特定的字段。并且,每个节点内的元素数量需要与同一级别上的其他节点随机。

示例层次结构

     Level 1
              Level 3
|---- A
|     |-- 1
|     |   |--- I
|     |
|     |-- 2
|         |--- III
|         |--- VI
|         |--- VII
|         |--- IX
|
|---- B
|     |-- 87
|         |--- AAA
|         |--- DDD
|
|---- C
      |-- ASDF
      |   |--- 11
      |   |--- 22
      |   |--- 33
      |
      |-- QWERTY
      |   |--- beft
      |
      |-- ROYGBP
          |--- Poi
          |--- Moi
          |--- Soy
          |--- Joy
          |--- Roy

描述上述层次结构的示例结果集

Level 1    Level 2    Level 3
A          1          I
A          2          III
A          2          VI
A          2          VII
A          2          IX
B          87         AAA
B          87         DDD
C          ASDF       11
C          ASDF       22
C          ASDF       33
C          QWERTY     beft
C          ROYGBP     Poi
C          ROYGBP     Moi
C          ROYGBP     Soy
C          ROYGBP     Joy
C          ROYGBP     Roy
sql-server t-sql
  • 3 个回答
  • 11903 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