该场景是一个 SQL Server 实例,一个主要使用 BULK INSERT 操作提供数据的数据库,并且插入的一些文本包含特殊字符,例如\xc3\xb1因为我在西班牙语环境中工作。
因此,在最初的小测试之后,我意识到当我运行简单的时,这些特殊字符没有正确显示select,所以我开始检查我能想到的所有内容:
select collation_name from sys.databases where name='DBNAME';结果为SQL_Latin1_General_CP1_CI_AS\n\n通过这些测试,我得出结论,数据未正确存储,这就是数据未正确显示和导出的原因。我在互联网上找到的几乎每个解决方案都建议使用nvarchar而不是varchar字符串数据类型字段,但这并不能解决这种情况。是什么破坏了我的插入?
我正在尝试保护我的业务逻辑,但我不想使用“使用加密”,因为它是不够的并且可能会被破坏。
我不想再次用 CLR 语言重新编写程序。
是否有一种简单的方法可以将 TSQL 编程编译为可供 SQL Server 使用的 DLL,就像它使用 CLR 程序集的方式一样?
加载 CSV 文件后,有各种单词错误地“写入”到数据库中。
一些例子:
Diã¡ria 应该 DiáriaCrã©dito 应该 CréditoLigaã§ãµes 应该 LigaçõesUsuã¡rio 应该 UsuárioNãºmeros 应该 Números有没有办法将符号转换为正确的字符?
我已经做了多次测试不同collations,并functions可能在互联网上搜索,但没有成功。
我有几个字符被替换为?. 你如何保持表格中的原始字符?我要插入的字符是?; 带腰带的拉丁文小写字母 L。是否可以将此字符添加到表中?
我已经很习惯使用 COMPRESS(),并DECOMPRESS()在内部论坛软件为我公司(目前在SQL Server 2017),而是试图使数据库尽可能高效,是有一个优势,加入_UTF-8到我的当前归类为Latin1_General_100_CI_AS_SC_UTF8在未来迁移到 SQL Server 2019?
我一直在尝试编写一个函数来检查一个字符串是否包含一个数字,而该数字不是更大数字的一部分(换句话说,如果要搜索的数字是 '6' 而字符串是 '7+16+2'它应该返回 false,因为这个字符串中的 '6' 是数字 '16' 的一部分)
我写了下面的函数(它很长,但我打算在重构之前先测试它)
在测试时,我发现了一个错误,它仅通过逻辑运行找到的数字的第一个实例。因此,使用 '6' 对 '16+7+9+6' 运行此函数将返回 false,因为它确定第一个 '6' 是更大数字的一部分并停止处理。
我认为要解决这个问题,我必须实现一个循环来缩短 'haystack' 字符串(这样,使用示例 '16+7+9+6',该函数在消除后继续检查 '+7+9+6'第一个“6”)但在花时间使已经复杂的函数变得更加复杂之前,我想检查是否有更简单的方法来实现相同的目标?
drop function dbo.runners_contain_runner
go
create function dbo.runners_contain_runner(@runner varchar(max), @runners varchar(max))
returns int
as
begin
/*
eliminate the plus sign from @runners so that the
'isnumeric' function doesn't return false positives (it returns 1 for '+')
*/
set @runners = replace(@runners,'+','_' )
declare @ret int;
set @ret = 0;
-- if the runner is the only runner return …Run Code Online (Sandbox Code Playgroud) SSMS 中有许多允许过滤的地方,例如对象资源管理器和分析器,但这些都将过滤器视为区分大小写,否则没有可见选项,因此如果您搜索,contains 'ASDF'则包括“ASDF_MyEntity”之类的值,但“asdf_MyEntity” "省略。
例如,我们在大型服务器上有很多SQL 代理作业,我正在尝试使用对象资源管理器按项目名称过滤它们,我们总是在作业名称前加上前缀。但是,这些显示为大写和小写变体。
另一个用例是在数千个条目中搜索与模块相关的存储过程。如果命名不一致(例如 PascalCase 与 camelCase),过滤搜索将忽略它。这对于调试来说似乎是一个不必要的幻象危险。
此外,对象资源管理器中的排序将每种类型的实体(例如表名、存储过程、作业名称等)的大写变体放在小写之前(因此大写Z在小写之前a),所以我要么必须滚动很多,或检查两个不同的过滤器(如果不是全部大写或全部小写字母,则检查更多过滤器 -准确地说是2 len(name)次)。
我意识到我只能手动查询作业、表和其他实体,但鉴于 SSMS 存在,这样做是荒谬的,因为它的名称是“SQL Server Management Studio”。
我可以做些什么来使 SSMS(和 SQL Server Profiler)像其他所有 Windows 应用程序一样忽略大小写?也许我可以在本地更改排序规则设置?
另外,为什么微软在实施 SSMS 时做出这个决定?我发现它只是有害的。
此外,SSMS 的加载初始屏幕显示“基于 Visual Studio 构建”,这会忽略解决方案资源管理器中的大小写。
PS 使用 SSMS 2014(版本 12.0.5214.6)。我无法进行任何服务器端更改,并且我的本地开发环境应与目标服务器环境匹配以进行测试。
我们想对我们的散列函数使用 MD5 而不是 SHA_256,但从 SQL Server 2016 开始,不推荐使用 MD5。我们将其用于散列(比较哪些记录已更改)。我们现在面临着使用这个函数冒着风险或使用 SHA_256 产生存储和性能开销的困境。令人沮丧的是,Microsoft 决定弃用这些功能,即使它们在某些情况下仍然有用。
该项目不是业务的关键组成部分。我们可能会选择 SHA_256,但这是正确的选择吗?新开发应该总是避免弃用的功能吗?
对于上下文 - 每天将有大约 1-2 百万个更新插入到一个 4 亿行表中,动态比较哈希字节。大约 30 列宽
https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql?view=sql-server-2017
使用 T-SQL,我试图找到最简单的方法来反转字符串的字符而不改变数值的位置。
所以对于字符串:
abc223de11
Run Code Online (Sandbox Code Playgroud)
有
edc223ba11
Run Code Online (Sandbox Code Playgroud) 在 SQL 中命名表时,我尽量远离 SQL 保留关键字,但今天有同事质疑Events作为表名的使用。他们说,任何在 SSMS 中变成绿色的东西都不应该用作表名。
Events在 MS SQL Server 中用作表名时,是否有任何我应该关注的冲突或问题?