小编Sol*_*zky的帖子

是否有排序规则按以下顺序 1,2,3,6,10,10A,10B,11 对以下字符串进行排序?

我有一个包含不同长度整数的 VARCHAR 列的数据库。我想对它们进行排序,所以 10 在 9 之后,而不是 1,并且 70A 在 70 之后。我可以使用WHERE 子句中的PATINDEX()、CTE 和 CASE 语句来做到这一点。

但是,我想知道是否有不需要的整理。

sql-server collation sorting natural-sort

12
推荐指数
3
解决办法
2900
查看次数

在 Python 中检索到的 SQL Server VARCHAR 列的编码问题

我们最近遇到了与在 SQL Server 中存储为 varchar(120) 的字段相关的编码问题。在 SSMS 中,varchar 显示为:

“谁杀了琼本?”

但是,当它被带入python时,它显示为:

在此处输入图片说明

我从 Python 方面对此进行了研究,并没有发生什么奇怪的事情。我的理论是 SQL Server 中的 varchar 接受 UTF-8 字符,这些字符在 python 中的显示方式与 SSMS 不同。我对 SQL Server 中的编码不是很熟悉。有人可以让我知道以下内容:

  • 在 SSMS 中有没有办法查看 varchar 的编码?例如,查看 \x82 而不是显示当前来自 SSMS 的逗号?
  • 我们正在使用 SQL Server 2008。有没有办法将任何 UTF-8 字符的编码更改为 ASCII 字符而不使用导入/导出工具或转储到平面文件?即我可以通过查询进行这种转换吗?
  • 有什么方法可以通过查询以编程方式识别有问题的记录(问题被定义为 ASCII 不支持的 UTF-8 字符)?

先感谢您!

使用sp_help N'table_name';我发现这个VARCHAR列的排序规则是:SQL_Latin1_General_CP1_CI_AS

sql-server sql-server-2008-r2 utf-8 encoding python

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

访问基于另一个数据库中的表的视图,而无需在该另一个数据库中的帐户

我根据 database2 中的表在 database1 中创建了视图。我SELECT授予了一个只能访问 database1 的用户的权限。用户无法使用此视图,因为他在 database2 中没有帐户。我该如何解决这个问题?我不想在 database2 中创建帐户。

sql-server-2008 security sql-server permissions view

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

如何从 SQL Server 审计数据中过滤掉标量值用户定义函数的使用情况?

我们有一个 SQL Server 数据库,它有一个数据库审计规范,它审计对数据库的所有执行操作。

CREATE DATABASE AUDIT SPECIFICATION [dbAudit]
FOR SERVER AUDIT [servAudit]
ADD (EXECUTE ON DATABASE::[DatabaseName] BY [public])
Run Code Online (Sandbox Code Playgroud)

我们发现,某些查询会将结果集中的每一行的标量函数的使用写入审计日志。当这种情况发生时,日志在我们可以 ETL 到它的最终休息位置之前就被填满了,我们的日志记录出现了空白。

不幸的是,由于合规性原因,我们不能简单地停止审核每条EXECUTE语句。

我们解决这个问题的第一个想法是使用Server AuditWHERE上的子句来过滤掉活动。代码如下所示:

WHERE [object_id] not in (Select object_id from sys.objects where type = 'FN' )
Run Code Online (Sandbox Code Playgroud)

不幸的是,SQL Server 不允许关系 IN 运算符(可能是因为它不想在每次必须写入审核日志时进行查询)。

我们想避免编写一个存储过程,其硬代码object_idWHERE条款,但是这是我们在解决这个问题的最好办法目前的想法。是否有我们应该考虑的替代方法?

我们注意到,当在递归 CTE 中使用标量函数时,它会导致查询为结果集中的每一行写入审计日志。

有一些标量值函数由供应商提供,我们无法删除或移动到备用数据库。

sql-server audit cte functions recursive

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

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

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

sys.xp_delete_files

这个新的扩展存储过程究竟有什么作用?它与xp_delete_file已经存在多年的有什么不同?它代替xp_delete_file吗?

sql-server extended-stored-procedure sql-server-2019 file-system

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

除了重新启动 SQL Server,还有什么方法可以强制重置 SQLCLR AppDomain?

我想强制重置 SQLCLR 使用的 AppDomain。除了重新启动 SQL Server 实例之外,我还能怎么做?

sql-server sql-clr

11
推荐指数
2
解决办法
5120
查看次数

如何让 SSMS 像 SSDT 一样在 sqlcmd 模式下使用 :r 使用当前脚本的相对路径?

如果我在同一个文件夹中有 foo.sql 和 bar.sql,则 foo.sql 在 sqlcmd 模式下从 SSDT 运行时可以引用 bar.sql :r ".\bar.sql"。但是,SSMS 不会找到它。Procmon 显示 SSMS 正在寻找%systemroot%\syswow64

带注释的 Procmon 屏幕截图

如何告诉 SSMS 在不显式声明路径的情况下查看当前脚本保存到的文件夹?

sql-server ssms sqlcmd ssdt

11
推荐指数
2
解决办法
5153
查看次数

修改 XML:将属性转换为元素

我有一XML列包含具有类似结构的数据:

<Root>
    <Elements>
        <Element Code="1" Value="aaa"></Element>
        <Element Code="2" Value="bbb"></Element>
        <Element Code="3" Value="ccc"></Element>
    </Elements>
</Root>
Run Code Online (Sandbox Code Playgroud)

如何使用 SQL Server 修改数据以将每个Value属性更改为元素?

<Root>
    <Elements>
        <Element Code="1">
            <Value>aaa</Value>
        </Element>
        <Element Code="2">
            <Value>bbb</Value>
        </Element>
        <Element Code="3">
            <Value>ccc</Value>
        </Element>
    </Elements>
</Root>
Run Code Online (Sandbox Code Playgroud)

更新:

我的 XML 看起来更像这样:

<Root attr1="val1" attr2="val2">
    <Elements>
        <Element Code="1" Value="aaa" ExtraData="extra" />
        <Element Code="2" Value="bbb" ExtraData="extra" />
        <Element Code="3" Value="ccc" ExtraData="extra" />
        <Element Code="4" Value="" ExtraData="extra" />
        <Element Code="5" ExtraData="extra" />
    </Elements>
    <ExtraData>
       <!-- Some XML is here -->
    </ExtraData>
</Root> …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xquery

11
推荐指数
2
解决办法
3290
查看次数

使用跨数据库证书时触发器中的权限

我使用跨数据库证书(如 Erland Sommarskog 所述)来控制对我环境中某个数据库的访问(SQL Server 2008 R2)。

我在数据库 A 中存储了更新数据库 B 中表的存储过程。直到现在,这一直适用于 db A 中的各种存储过程和 db B 中的表。我正在尝试更新 db B 中的表,但该表上有一个触发器。此触发器在 db B 的另一个表中插入其他数据。我收到错误消息:

消息 916,级别 14,状态 1,过程 table_trigger,第 11 行 服务器主体“sql\login”在当前安全上下文下无法访问数据库“B”。

我尝试为与证书绑定的数据库 B 用户授予插入权限以插入其他表,但它没有解决错误。除了更改触发器以使其使用之外,我还有其他选择WITH EXECUTE AS OWNER吗?

这是复制问题的 DDL:

CREATE LOGIN [GuggTest] WITH PASSWORD=N'abcd', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

CREATE DATABASE A;
CREATE DATABASE B;

USE A;

CREATE TABLE dbo.SPtoUpdate
    (
      ID INT
    , ILoveFishing VARCHAR(255)
    );
INSERT INTO dbo.SPtoUpdate
        ( ID , ILoveFishing )
VALUES  ( …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server permissions signature certificate

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

bcp 命令 '?' 附近的语法不正确。字符实际上是:“ä”

我 在 Ubuntu (Linux) 上安装了mssql-servermssql-tools。当我尝试使用以下命令行使用bcp命令导出数据时:

bcp DBname.dbo.Täble_Name out Täble_Name -c -k  -S127.0.0.1 -Usa -PpassWord -r ~
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

SQLState = 37000,NativeError = 102
错误 = [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]'?' 附近的语法不正确。

?ä

如果我Täble_Name用方括号括起来:

 bcp DBname.dbo.[Täble_Name] out Täble_Name -c -k  -S127.0.0.1 -Usa -PpassWord -r ~
Run Code Online (Sandbox Code Playgroud)

我在对象名称上收到此错误:

SQLState = S0002,NativeError = 208
错误 = [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]无效的对象名称“DBname.dbo.Täble_Name”。

我进一步添加了单引号''以及-q选项(启用带引号的标识符):

bcp 'DBname.dbo.[Täble_Name]' out …
Run Code Online (Sandbox Code Playgroud)

sql-server linux ubuntu bcp sql-server-2017

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