小编Sol*_*zky的帖子

旧的归类类型会影响数据库性能吗?

在我的项目中,我们SQL_1xCompat_CP850_CI_AS用作 SQL Server 实例和应用程序数据库的排序规则设置。据我所知,这是出于向后兼容性目的仍然支持的非常旧的排序规则之一。我想知道使用这种“旧”归类类型是否会影响 SQL Server 的整体性能?

另外,SQL_1xCompat_CP850_CI_ASSQL_Latin1_General_Pref_Cp850_CI_AS整理有什么区别吗?MSDN 上的描述看起来非常相似:在此处输入图片说明 两者都CI_AS_KI_WI使用代码页 850,并且具有相同的排序顺序名称nocase34.850。如果我们将整理设置更改为 ,我们会有什么好处SQL_Latin1_General_Pref_Cp850_CI_AS吗?

performance sql-server collation

5
推荐指数
1
解决办法
670
查看次数

sqlcmd 历史?

如何列出/查看sqlcmd历史记录?

Mysql、Postgresql 和 sqlite 写入点文件:.mysql_history, .psql_history and .sqlite_history.

在使用 mssql/sql-server 时,我正在寻找等效(或近似值)。

谢谢。

sql-server sqlcmd

5
推荐指数
1
解决办法
708
查看次数

唯一索引值中有问题的斜线和问号

PhoneSQL Server 在唯一索引中将它们视为相同的下面插入的值是什么意思?

CREATE TABLE Phone
(
  Id int identity(1, 1) primary key,
  Phone nvarchar(448) not null
)
go

create unique index IX_Phone on Phone(Phone)
with (data_compression = page);
go

insert into Phone Values ('?281/?263-?8400');
insert into Phone Values ('?281/?263-?8400');

select * from Phone;

drop table Phone;
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

消息 2601,级别 14,状态 1,第 13 行无法在唯一索引为“IX_Phone”的对象“dbo.Phone”中插入重复的键行。重复的键值为 (?281/?263-?8400)。

sql-server unicode sql-server-2016

5
推荐指数
1
解决办法
1293
查看次数

SSMS - 无法批量加载,因为无法打开文件

我们有一个用户每次使用网络位置进行批量加载时都会收到此错误消息,它会在下面引发错误。

“无法批量加载,因为无法打开文件。操作系统错误代码 3(无法检索此错误的文本。原因:15105)。”

  • 如果用户登录远程服务器并运行相同的查询,它工作正常
  • FQDN 指定为文件的位置 (\servername\sharename\filename.txt)

  • 当文件被复制到服务器(C:\ 驱动器)上时,查询通过 SSMS 运行良好

  • 我们使用的是 SQL Server 2008 R2

我已经检查了共享文件夹的所有 NTFS 权限。我已经浏览了许多建议解决方案的帖子,但没有运气。

sql-server ssms sql-server-2008-r2 bulk-insert

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

sys.schemas 中的 principal_id 有什么意义?

principal_idin的含义是什么?sys.schemas它何时会与 不同schema_id

1> SELECT LEFT(name,20), schema_id, principal_id FROM sys.schemas;
2> GO
                     schema_id   principal_id
-------------------- ----------- ------------
dbo                            1            1
guest                          2            2
INFORMATION_SCHEMA             3            3
sys                            4            4
db_owner                   16384        16384
db_accessadmin             16385        16385
db_securityadmin           16386        16386
db_ddladmin                16387        16387
db_backupoperator          16389        16389
db_datareader              16390        16390
db_datawriter              16391        16391
db_denydatareader          16392        16392
db_denydatawriter          16393        16393

(13 rows affected)
Run Code Online (Sandbox Code Playgroud)

在内部,我看到 the schema_idcome from sys.sysclsobjswhile the principal_idcome fromsys.syssingleobjrefsr.indepid字段。

schema sql-server database-internals users catalogs

5
推荐指数
1
解决办法
3169
查看次数

SQL Server 大容量插入正确解释某些 Unicode 字符而不是其他字符?

出于某种原因,MS SQL Server 2016 批量插入会误解/翻译 Unicode 字符:

  • C9 (É) 变成 2B (+)
  • A1 (¡) 到 ED (í)
  • A0 ( ) 到 E1 (á)
  • AE (®) 到 AB («)
  • CB (Ë) 到 2D (-)
  • D1 (Ñ) 到 2D (-)
  • 92 (') 到 C6 (Æ)
  • 96 (–) 到 FB (û)

即 Notepad++ 和 xxd 显示平面文件有 0xC9,但在批量插入后,表显示“+”,并在 SQL Server 中转换为 varbinary 显示为 0x2B。备份也有 0xC9。

我正在向 MS SQL Server 2016 中批量插入 25 个平面文件。它是 15Gb 数据,我正在使用管道 ( | ) 字段分隔符和CRLF行分隔符。

我批量插入到我提供的备份的截断结构中。当我与备份进行比较时,存在差异。注意:我必须等待 25 小时才能从数据源备份,但可以在 …

sql-server collation encoding unicode bulk-insert

5
推荐指数
1
解决办法
6181
查看次数

一个通用映射表 VS 许多特定映射表

我正在尝试设计数据库表来跟踪最终用户上传的文件。
文件可以在不同的上下文中上传。
每个上下文都是一个不同的表。

举个例子:

  • 员工可以针对“每周费用”条目上传多个“收据”文件。
  • 员工可以针对“宠物”条目上传多个“照片”文件。

这个(人为的)场景中的实体/表是:

  • Employees (Id, Name)
  • Expenses (Id, Date, RequestedRefund, RequestedByEmployeeId)
  • Pets (Id, Name, Type, BelongsToEmployeeId)

我已经有一个名为的表Files,用于跟踪有关文件本身的信息:
Files (Id, Name, Size, Extension, Folder)

我的问题是关于如何根据文件记录映射费用收据上传和宠物照片上传。我知道我可以通过两种方式做到这一点:

第一个选项:

有一个通用映射表:GenericFileMap (FileId, ContextId, Type)
where

  • FileId 是文件记录的id
  • ContextId 是我试图检索的上下文记录的 ID
  • Type 是描述上下文本身的字段

在这种情况下,我会像这样获取员工的所有费用收据:

SELECT *
FROM Employee e
INNER JOIN Expenses ex ON e.Id = ex.RequestedByEmployeeId
INNER JOIN GenericFileMap g ON g.ContextId = ex.Id AND g.Type = 'expense'
INNER JOIN Files f ON g.FileId = f.Id
Run Code Online (Sandbox Code Playgroud)

第二个选项:

每个实体/上下文表都有单独的映射表: …

database-design sql-server table

5
推荐指数
1
解决办法
2309
查看次数

将列从 NVARCHAR 转换为 VARCHAR

我有几个有很多NVARCHAR(MAX)列的大表。该数据库仅供美国使用,我认为任何列中都没有任何外来字符或字母,所以我想调查一下:

  1. 将其中许多列从 更改为NVARCHARVARCHAR并且
  2. 根据我所做的一些数据分析,将这些列的大小调整为更合适的大小。例如,我知道其中某些列中数据的最大长度仅为 30 个字符左右,因此NVARCHAR(MAX)看起来有些过大。

我还试图限制隐式转换。

在执行此操作之前,有什么简单的方法可以确定每列是否确实只包含VARCHAR数据并且不会出现任何转换问题NVARCHAR

sql-server datatypes varchar type-conversion sql-server-2016

5
推荐指数
2
解决办法
6万
查看次数

将 .Net 程序集添加到 SQL CLR,而不打开 TRUSTWORTHY

我正在尝试使用 Solomon Rutzky 在其后程序集部署中提供的指导来添加“System.Messaging.dll”,并使用非对称密钥使用 UNSAFE 或 EXTERNAL_ACCESS 权限,但我在第一个障碍上失败了。

脚本的第一部分是从程序集创建证书;

CREATE CERTIFICATE [MS.NETcer] FROM EXECUTABLE FILE = 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll';
GO
Run Code Online (Sandbox Code Playgroud)

但是,当我执行此操作时,我收到错误;

Msg 15208, Level 16, State 1, Line 1
The certificate, asymmetric key, or private key file does not exist or has invalid format.
Run Code Online (Sandbox Code Playgroud)

我用来执行命令的帐户具有“sysadmin”服务器角色。这是在 SQL Server 2008 实例上。

请问有人对为什么失败有任何想法吗?

---------- 更新 1 -----------

我采纳了所罗门的建议并修改了我的脚本,使其看起来像这样;

CREATE ASYMMETRIC KEY [Key.System.Messaging] FROM EXECUTABLE FILE = 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll';
GO

CREATE LOGIN [CLR.Login.System.Messaging] FROM ASYMMETRIC KEY [Key.System.Messaging];
GO

GRANT UNSAFE ASSEMBLY TO [CLR.Login.System.Messaging];
GO
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好。我现在运行 …

sql-server-2008 sql-server best-practices sql-clr signature

5
推荐指数
1
解决办法
4100
查看次数

SQL Server 中选择查询的区分大小写排序规则

我们的 SQL Server 的排序规则设置为SQL_Latin1_General_CP1_CI_AS

我有一个要求,即我们在不同的情况下具有相同的值,但 SQL Server 会以相同的方式对待它们,因为我们的排序规则在服务器级别设置为不区分大小写。我的要求是,我需要根据一个特定查询的大小写敏感性将每个值视为不同的。我COLLATE SQL_Latin1_General_CP1_CS_ASWHERE子句中使用来强制区分大小写。我的问题是:此排序规则是否仅应用于此查询,还是最终会在列或表级别为使用此列的所有查询更改此设置?

Create Table #tmpTest 
(
id int primary key identity(1,1),
name varchar(100)
)

Insert Into  #tmpTest  values ('TestQuery'),('TESTQUERY'),('TEstquerY')

Select * from #tmpTest
 Where name = 'TestQuery'

Select * from #tmpTest
 Where name = 'TestQuery'
 Collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)

sql-server query collation t-sql sql-server-2012

5
推荐指数
1
解决办法
1131
查看次数