小编Sol*_*zky的帖子

用 GO 分解插入语句

我正在尝试建立这个答案如何运行包含许多插入的大型脚本而不会耗尽内存?

而分手的查询与较小的BEGIN TRANSACTION,然后GO

BEGIN TRANSACTION; 

MERGE ghcnd.dbo.us_APCP as target 
using 
(values 
  ('US1CASN0123','2018-03-22','--N','251'),
  ('US1KSGO0013','2018-03-22','--N','41'),
  ('US1WYFM0039','2018-03-22','--N','0'),
  ('US1SCCF0008','2018-03-22','--N','10')) 
as source(cell,[date],valueFlag,[value]) 
on target.cell = source.cell 
AND target.date = source.date  
when matched then 
    update 
    set valueFlag = source.valueFlag , 
        value = source.value 
when not matched then 
    insert (cell,[date],valueFlag,[value]) 
    values (cell,[date],valueFlag,[value]) 

COMMIT TRANSACTION; GO 
Run Code Online (Sandbox Code Playgroud)

但是我收到这个错误

消息 102,级别 15,状态 1,第 3 行 ')' 附近的语法不正确。消息 102,级别 15,状态 1,第 3 行“GO”附近的语法不正确。

sql-server scripting merge

4
推荐指数
1
解决办法
752
查看次数

为什么在某些情况下不替换 Unicode 字符?

正如预期的那样,在“测试”中运行此结果:

SELECT
    REPLACE(NCHAR(1234), NCHAR(1234), N'test');
Run Code Online (Sandbox Code Playgroud)

但是,运行此结果会生成“a?a”,其中没有“test”:

SELECT
    REPLACE(N'a' + NCHAR(1234) + N'a', NCHAR(1234), N'test');
Run Code Online (Sandbox Code Playgroud)

我认为这可能与 haystack 而不是针的字符串连接有关,但是当我尝试这样做时,它仍然没有“工作”:

SELECT
    REPLACE(N'a' + NCHAR(1234) + N'a', N'' + NCHAR(1234) + N'', N'test');
Run Code Online (Sandbox Code Playgroud)

结果:“a?a”

我怀疑这可能与它如何解释字符有关,所以我尝试指定一个二进制排序规则......并“修复”了这个问题:

SELECT
    REPLACE(N'a' + NCHAR(1234) + N'a' COLLATE Latin1_General_100_BIN2, NCHAR(1234), N'test');
Run Code Online (Sandbox Code Playgroud)

结果:“atesta”。

为什么?

这种行为似乎对某些角色存在,但对其他角色不存在。

SELECT
    REPLACE(N'a' + NCHAR(23423) + N'a', NCHAR(23423), N'test');
Run Code Online (Sandbox Code Playgroud)

结果:“atesta”(“作品”)

SELECT
    REPLACE(N'a' + NCHAR(5342) + N'a', NCHAR(5342), N'test');
Run Code Online (Sandbox Code Playgroud)

结果:“a?a”(不“工作”)

为什么?

sql-server collation t-sql unicode

4
推荐指数
1
解决办法
496
查看次数

为什么在 SQL Server 中将 Base64 字符串解码为 NVARCHAR 时会得到错误的字符?

我一直在研究如何使用 SQL Server 解码 Base64,在网上搜索了许多解决方案(一些来自此处)后,似乎基于这种方法。

SELECT CAST(CAST('Base64StringHere' as XML ).value('.','varbinary(max)') AS VARCHAR(250))
Run Code Online (Sandbox Code Playgroud)

当我有 ASCII 文本时,这非常有效。但是,当我有以下法语文本时,它会损坏(大概是由于 VARCHAR 的限制)。

Où est le café le plus proche?
T8O5IGVzdCBsZSBjYWbDqSBsZSBwbHVzIHByb2NoZT8=
Run Code Online (Sandbox Code Playgroud)

并提供以下输出。

Où est le café le plus proche?
Run Code Online (Sandbox Code Playgroud)

我认为相对简单的解决方法是将 to 更改为CASTNVARCHAR但这会再次导致损坏。

SELECT CAST(CAST('T8O5IGVzdCBsZSBjYWbDqSBsZSBwbHVzIHByb2NoZT8=' as XML ).value('.','varbinary(max)') AS NVARCHAR(250) )

????????????????
Run Code Online (Sandbox Code Playgroud)

我的搜索引擎技能可能让我失望,但我似乎找不到其他有我问题的人。

有什么想法吗?

sql-server collation sql-server-2012 encoding unicode

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

Arab_100_CS_AS_KS_WS_SC_UTF8 和 Latin1_General_100_CS_AS_KS_WS_SC_UTF8 有什么区别?

从 SQL Server 2019 开始,它支持 UTF-8 作为排序规则。但是,根据以下查询:

SELECT COLLATIONPROPERTY('Arabic_100_CS_AS_KS_WS_SC_UTF8', 'CodePage')
SELECT COLLATIONPROPERTY('Latin1_General_100_CS_AS_KS_WS_SC_UTF8', 'CodePage');
Run Code Online (Sandbox Code Playgroud)

两者都返回65001Windows 中的 Unicode代码页。此外,所有新_UTF8排序规则都使用代码页65001

SELECT * FROM sys.fn_helpcollations() WHERE name LIKE '%_UTF8';
Run Code Online (Sandbox Code Playgroud)

usingArabic_100_CS_AS_KS_WS_SC_UTF8Latin1_General_100_CS_AS_KS_WS_SC_UTF8as 排序规则之间有什么区别吗?

sql-server collation utf-8 unicode sql-server-2019

4
推荐指数
1
解决办法
181
查看次数

将特定处理器分配给 SQL Server 2008 R2 群集实例是否不好?

我有一个带有被动节点和主动节点的 SQL Server 2008 R2 故障转移群集。服务器在物理上是相同的。我有两个 SQL Server 实例,一个设置为使用前 3 个 NUMA 节点中的所有 CPU,另一个设置为使用第 4 个 NUMA 节点中的所有 CPU。

这似乎工作正常,即使发生故障转移,但这是一个坏主意吗?

如果无源服务器没有那么多处理器,故障转移会发生什么?

sql-server clustering sql-server-2008-r2 configuration cpu

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

以编程方式查找创建唯一组合键所需的最少字段集

我正在将不同来源的平面文件导入 SQL Server 中的表中。我正在使用提取中的字段组合创建一个复合主键,这些字段将为我的每一行提供一个唯一的键。

我现在的做法是从 1 个字段开始,然后继续连接字段,直到找到对所有记录都是唯一的键。这可能有点耗时,或者我最终可能会连接比我真正需要的更多的列以获得唯一键。

是否有某种 SQL 脚本可以在表上运行,它会给我最少数量的字段(名称),我需要连接以获得唯一键?因此,如果表中有 1 个字段对所有记录都是唯一的,则将返回该 1 个字段名称。如果我需要连接 [memberid]、[claimid] 和 [date of service] 以获得唯一键,那么这 3 个字段名称将是脚本的结果。

database-design sql-server primary-key unique-constraint

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

将 nvarchar(10) 复制到 char(10) 时出现“字符串或二进制数据将被截断”错误

我正在将一个 SQL 表/列中的值插入到另一个中。由于其他原因,这些列的数据类型不同,但我不明白为什么 nvarchar(10) 源和 char(10) 目标有时会在 SQL Server 2014 中导致错误:

字符串或二进制数据将被截断。

len(sourcecol) = 10 和 datalength(sourcecol) = 20。

可能是因为 nvarchar 类型的源列中存储了一些不可见的空格/字符?

sql-server collation encoding sql-server-2014 unicode

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

在保持字符串区分大小写的同时,可以使数据库对象不区分大小写吗?

在 Microsoft SQL Server (2014) 中,可以在不区分大小写和区分大小写的排序规则之间进行选择。

我使用区分大小写的排序规则的原因是"test" = "TEST"return false

然而,我想保留的是,当表"TEST"存在时,编写类似的查询select * from test;仍然有效。当数据库有区分大小写的排序规则时,它不会,因为我需要像这样写select * from TEST;

有没有办法分别设置“对象整理”和“字符串整理”?

sql-server collation sql-server-2014 case-sensitive

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

不显示从文件导入的特殊字符

该场景是一个 SQL Server 实例,一个主要使用 BULK INSERT 操作提供数据的数据库,并且插入的一些文本包含特殊字符,例如\xc3\xb1因为我在西班牙语环境中工作。

\n\n

因此,在最初的小测试之后,我意识到当我运行简单的时,这些特殊字符没有正确显示select,所以我开始检查我能想到的所有内容:

\n\n
    \n
  • 文件编码:要批量插入的文件具有正确的编码:ANSI
  • \n
  • 数据库编码:数据库具有正确的编码(感谢上帝):select collation_name from sys.databases where name='DBNAME';结果为SQL_Latin1_General_CP1_CI_AS\n\n
      \n
    • Latin1:使用的字符集。这很适合我
    • \n
    • 一般:这里没什么真正有趣的
    • \n
    • CP1:这意味着它使用代码页 1,简而言之,意味着用于编码 WIN-1252 的代码页 1252 <=> 代码页,与 Latin1 非常相似
    • \n
    • CI:不区分大小写
    • \n
    • AS:区分重音,因此 \xc3\xa1 与 a 不同
    • \n
  • \n
  • 将数据导出到文件并检查:文件编码是ANSI ,但数据显示不正确,没有特殊字符,而是我发现一些其他字符使文本难以阅读。
  • \n
\n\n

通过这些测试,我得出结论,数据未正确存储,这就是数据未正确显示和导出的原因。我在互联网上找到的几乎每个解决方案都建议使用nvarchar而不是varchar字符串数据类型字段,但这并不能解决这种情况。是什么破坏了我的插入?

\n

sql-server import encoding bulk-insert

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

SSMS - 如何在对象资源管理器中进行不区分大小写的搜索

前言:指的不是 查询

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)。我无法进行任何服务器端更改,并且我的本地开发环境应与目标服务器环境匹配以进行测试。

sql-server collation ssms case-sensitive

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