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

如何告诉 SSMS 在不显式声明路径的情况下查看当前脚本保存到的文件夹?
有两个原因促使我提出这个问题:
tSQLt当存在具有非默认排序规则的列时
,T-SQL 测试框架 tSQLt 将其视为“高严重性”问题。测试的作者声明如下:
我并不是建议每个字符串列都应该有一个与数据库的默认排序规则相匹配的排序规则。相反,我建议当它不同时,应该有一个很好的理由。
然而,如前所述,失败测试的严重性被认为是高的。
八达通部署
在配置八达通部署服务器时,在八达通服务器实例的初始化过程中,设置失败并出现致命错误。与错误消息相关的文章并没有解释为什么这是一项要求,而只是说明它将成为未来部署的一项要求,包括 Octopus 3.8 版。
附带说明一下,RedGate 的 CI 工具包DLM 自动化套件支持具有不同排序规则的部署而不会出现投诉。
将所有列排序规则保留为数据库默认值的建议对我来说更像是指南或最佳实践。为什么有人认为这是一个严重的错误?
我 在 Ubuntu (Linux) 上安装了mssql-server和mssql-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) 我有一个带有唯一键的表,其中包含一NVARCHAR(50)列(正确与否,但在那里)。因此,当尝试插入?c或C(与插入顺序无关)时,由于整理问题,它会在第二次插入时中断。这是错误:
(受影响的 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
当我检查我们的 SQL Prod 服务器时,每次打开活动监视器时,我总是SQLCLR在活动监视器的资源等待部分的第一个列表中看到。它总是有一个很高的数字。是SQLCLR为了什么?SQLCLR在活动监视器中具有高资源等待数的服务器是否有害?
最近,我接到了打印所有质数(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)上做这样的程序是否可行。
如果是,它会如何结束。
Microsoft SQL Server 本身是否支持replace使用通配符的某种功能?我认为正则表达式本身不可用。
我注意到有一个PATINDEX函数可以用来将一个解决方案组合在一起——有没有更简单的方法?
例如REPLACE(data,'[xy]','q'),以取代x或y与q。
根据 MS-DOCS about System information schema views,架构列定义有一个警告说明:
**重要** 不要使用 INFORMATION_SCHEMA 视图来确定对象的架构。查找对象架构的唯一可靠方法是查询 sys.objects 目录视图。
为什么不能使用 INFORMATION_SCHEMA 视图来确定对象的架构?
这个信息有误吗?
schema sql-server metadata information-schema sql-server-2017
我正在使用 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
尝试使用 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()将不起作用,因为我将使用该变量作为数据库名称)。