小编Sol*_*zky的帖子

如何让 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
查看次数

为什么在单个数据库中混合列排序规则被认为是不好的?

有两个原因促使我提出这个问题:

tSQLt当存在具有非默认排序规则的列时
,T-SQL 测试框架 tSQLt 将其视为“高严重性”问题。测试的作者声明如下:

我并不是建议每个字符串列都应该有一个与数据库的默认排序规则相匹配的排序规则。相反,我建议当它不同时,应该有一个很好的理由。

然而,如前所述,失败测试的严重性被认为是高的。

八达通部署
在配置八达通部署服务器时,在八达通服务器实例的初始化过程中,设置失败并出现致命错误。与错误消息相关的文章并没有解释为什么这是一项要求,而只是说明它将成为未来部署的一项要求,包括 Octopus 3.8 版。

附带说明一下,RedGate 的 CI 工具包DLM 自动化套件支持具有不同排序规则的部署而不会出现投诉。

将所有列排序规则保留为数据库默认值的建议对我来说更像是指南或最佳实践。为什么有人认为这是一个严重的错误?

sql-server best-practices collation

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

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
查看次数

N'?c' 使用 Latin1_General_CI_AS 排序规则认为 N'C' 的重复键

我有一个带有唯一键的表,其中包含一NVARCHAR(50)列(正确与否,但在那里)。因此,当尝试插入?cC(与插入顺序无关)时,由于整理问题,它会在第二次插入时中断。这是错误:

(受影响的 1 行)消息 2601,级别 14,状态 1,第 16 行无法在具有唯一索引“IX_TestT”的对象“dbo.testT”中插入重复的关键行。重复的键值为 (C)。

选择退货:

在此处输入图片说明

数据库默认排序规则是Latin1_General_CI_AS. 花了一些时间寻找如何解决它,而不会对现有结构进行太多更改,但找不到开始工作的方法。尝试了不同的排序规则和组合,一切都失败了。阅读(这里这里)关于字符扩展等,仍然卡住了。这是我用来复制问题的示例代码,请随时修改并推荐任何有助于解决此问题的内容。

CREATE TABLE testT (
    [Default_Collation]     [NVARCHAR] (50) COLLATE DATABASE_DEFAULT,
    [Latin1_General_CI_AS]  [NVARCHAR] (50) COLLATE Latin1_General_CI_AS,
    [Latin1_General_CI_AI]  [NVARCHAR] (50) COLLATE Latin1_General_CI_AI,
    [SQL_Collation]         [NVARCHAR] (50) COLLATE SQL_Latin1_General_CP1_CI_AS);
CREATE UNIQUE CLUSTERED INDEX [IX_TestT] ON [dbo].[testT] ([Default_Collation])
ON [PRIMARY]
GO

INSERT INTO testT
SELECT  N'?c',  --COLLATE Latin1_General_CI_AS
        N'?c',  --COLLATE Latin1_General_CI_AS
        N'?c',  --COLLATE Latin1_General_CI_AS
        N'?c'   --COLLATE Latin1_General_CI_AS

INSERT INTO testT
SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server collation t-sql sql-server-2014 unique-constraint

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

SQL Server Management Studio (SSMS) 中活动监视器中的 SQLCLR 等待类型是什么?

当我检查我们的 SQL Prod 服务器时,每次打开活动监视器时,我总是SQLCLR在活动监视器的资源等待部分的第一个列表中看到。它总是有一个很高的数字。是SQLCLR为了什么?SQLCLR在活动监视器中具有高资源等待数的服务器是否有害?

sql-server activity-monitor sql-server-2012 sql-clr

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

给定范围内的质数

最近,我接到了打印所有质数(1-100)的任务。我在那里彻底失败了。我的代码:

Create Procedure PrintPrimeNumbers
@startnum int,
@endnum int
AS 
BEGIN
Declare @a INT;
Declare @i INT = 1
(
Select a = @startnum / 2;
WHILE @i<@a
BEGIN
@startnum%(@a-@i)
i=i+1;
)
END
Run Code Online (Sandbox Code Playgroud)

虽然我最终没有完成它,但我想知道在数据库(SQL Server 2008 R2)上做这样的程序是否可行。

如果是,它会如何结束。

sql-server t-sql sql-server-2008-r2

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

SQL Server:用通配符替换?

Microsoft SQL Server 本身是否支持replace使用通配符的某种功能?我认为正则表达式本身不可用。

我注意到有一个PATINDEX函数可以用来将一个解决方案组合在一起——有没有更简单的方法?

例如REPLACE(data,'[xy]','q'),以取代xyq

sql-server t-sql pattern-matching replace

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

为什么不应该使用 INFORMATION_SCHEMA 视图来确定对象的架构?

根据 MS-DOCS about System information schema views,架构列定义有一个警告说明:

**重要** 不要使用 INFORMATION_SCHEMA 视图来确定对象的架构。查找对象架构的唯一可靠方法是查询 sys.objects 目录视图。

为什么不能使用 INFORMATION_SCHEMA 视图来确定对象的架构?

这个信息有误吗?

schema sql-server metadata information-schema sql-server-2017

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

LIKE 不支持 PostgreSQL 不确定性排序规则

我正在使用 Postgresql v12。我创建了一个像这样的排序规则:

CREATE COLLATION ci (provider = icu, locale = 'tr_TR', deterministic = false);
Run Code Online (Sandbox Code Playgroud)

我在表中使用了该排序规则:

create table testtable1 (
    id serial  primary key,
    name text  COLLATE "ci"
);
Run Code Online (Sandbox Code Playgroud)

我插入了示例数据:

insert into testtable1 values(3,'abc');
Run Code Online (Sandbox Code Playgroud)

当我使用 查询该表时LIKE,它返回以下错误:

select name from testtable1 WHERE name LIKE '%a%'  
Run Code Online (Sandbox Code Playgroud)


错误:LIKE SQL 状态不支持非确定性排序规则:0A000

但我需要使用LIKE. 有什么办法允许这样做吗?

collation unicode case-sensitive international-components-unicode postgresql-12

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

SQLCMD 模式下另一个变量内的变量

尝试使用 SQLCMD 模式整理我的 SQL 脚本时遇到了一个问题:

:setvar db_suffix "some_suffix"
:setvar some_db "some_db_$(db_suffix)"
print 'some_db: $(some_db)'
Run Code Online (Sandbox Code Playgroud)

其输出是:

some_db: some_db_$(db_suffix)
Run Code Online (Sandbox Code Playgroud)

然而,我的预期是:

some_db: some_db_some_suffix
Run Code Online (Sandbox Code Playgroud)

有没有办法像这样进行变量插值?

(请注意,诸如此类的 T-SQL 函数CONCAT()将不起作用,因为我将使用该变量作为数据库名称)。

sql-server scripting sqlcmd

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