小编Sol*_*zky的帖子

是否可以将证书添加到数据库角色?

我有一个证书,用于对 SQL Server 中的存储过程进行 DB 间访问,并且能够通过使用以下方法在数据库中创建新用户来提供对存储过程的访问:

CREATE CERTIFICATE testCertificate
FROM FILE = 'test_certificate6.cer';

CREATE USER testCertificateUser 
FROM CERTIFICATE testCertificate;

GRANT AUTHENTICATE TO testCertificateUser;
GRANT EXECUTE ON storedProc1 TO testCertificateUser;
Run Code Online (Sandbox Code Playgroud)

但需要能够将跨数据库访问添加到现有数据库角色(为了与现有系统兼容)。我该怎么做呢?

sql-server t-sql signature certificate

6
推荐指数
1
解决办法
544
查看次数

包含数据库整理错误

将数据库更改为部分包含时,出现以下错误:

无法解决 EXCEPT 操作中“Latin1_General_CI_AS”和“Latin1_General_100_CI_AS_KS_WS_SC”之间的排序规则冲突。

在编译 > 对象期间,过程“RSExecRole.DeleteExtensionModuleDDL”中遇到错误。数据库“VeeamOne”的包含选项已更改,或者该对象存在于模型 db 中并且用户尝试创建新的包含数据库。ALTER DATABASE 语句失败。无法更改数据库“VeeamOne”的包含选项,因为在验证 SQL 模块期间遇到编译错误。请参阅以前的错误。ALTER DATABASE 语句失败。(.Net SqlClient 数据提供程序)

我认为这是报告的对象来自 SSRS。但是,我正在更改排序规则的 DB 是一个完全独立的应用程序。

有没有人对如何解决这个问题有任何建议?

================================================== ====================== 好的,这是 proc 的代码,但不确定它是什么导致它无法被包含

USE [VeeamOne]
GO
/****** Object:  StoredProcedure [reporter].[DeleteExtensionModuleDDL]    Script Date: 02/12/2015 12:06:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [reporter].[DeleteExtensionModuleDDL]
@EMID int
AS
BEGIN
SET NOCOUNT ON;
declare @Debug bit;
set @Debug = 0;
declare @Emulate bit;
set @Emulate = 0;
declare @reportPackDestructorFunctionName nvarchar(max)
exec @reportPackDestructorFunctionName = [reporter].GenerateExtensionModuleDestructorName @EMID
if …
Run Code Online (Sandbox Code Playgroud)

sql-server collation sql-server-2012 contained-database except

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

如何查找具有多个连续大写字符的值

对于我正在处理的项目,我需要识别大写不正确的值。

例如,我需要它来识别以下类型的值:

Mr JOHN Smith
MR John Smith
Mr John SMITH
Mr JOhn Smith
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的想法:

Select * from table where Name = upper(Name) 
  collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)

(它给出了全部大写的行的结果,例如 MR JOHN SMITH)

Select * from table where right(Name,3) = upper(right(Name,3)) 
  collate SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)

它也拾取了一些行。

但我怀疑这是解决此问题的最有效方法。

sql-server collation t-sql sql-server-2014 unicode

6
推荐指数
1
解决办法
3632
查看次数

.NET SQLCLR 程序集在 SQL Server 2016 中不起作用(错误消息 10314)

我正在将数据库应用程序从 Windows 2008 R2/SQL Server 2008 R2 迁移到使用第三方 .NET CLR 程序集来解析字符串的 Windows 2012 R2/SQL Server 2016。

我得到的错误是:

尝试加载程序集 ID 65540 时 Microsoft .NET Framework 中发生错误。服务器可能资源不足,或者程序集可能不受 PERMISSION_SET = EXTERNAL_ACCESS 或 UNSAFE 的信任。再次运行查询,或检查文档以了解如何解决程序集信任问题。有关此错误的更多信息:
System.IO.FileLoadException: 无法加载文件或程序集“clrsplit,版本=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。发生与安全相关的错误。(来自 HRESULT 的异常:0x8013150A)

System.IO.FileLoadException: 在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean SuppressSecurityChecks. (AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean SuppressSecurityChecks) 在 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblyMarkSecurity, StackIndPrrawlPrawl for …

sql-server sql-clr sql-server-2016

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

从局域网访问 SQL Server Express LocalDB

我正在开发一个需要 sql server 的软件。但是对于 50 MB 的应用程序,告诉客户安装 SQL Server 并不是一个好主意。所以我认为最好使用 SQL Server Express LocalDB。

我想提供从局域网访问我的应用程序的功能。但我没有得到任何相关的主题来做到这一点。

是否可以在局域网上访问 SQL Server Express LocalDB?

与 SQL Server 相比,SQL Server Express LocalDB 有哪些限制?

sql-server sql-server-localdb

6
推荐指数
1
解决办法
6698
查看次数

运算符“&”如何在sql server中工作?

当有人这样做时,我正在我们的一台测试服务器上运行跟踪:

在此处输入图片说明

我可以在跟踪中捕获的查询之一是:

declare @UserOption int
select @UserOption=convert(int, c.value) from sys.configurations c where c.name='user options'

SELECT
CAST(@UserOption & 1 AS bit) AS [DisableDefaultConstraintCheck],
CAST(@UserOption & 2 AS bit) AS [ImplicitTransactions],
CAST(@UserOption & 4 AS bit) AS [CursorCloseOnCommit],
CAST(@UserOption & 8 AS bit) AS [AnsiWarnings],
CAST(@UserOption & 16 AS bit) AS [AnsiPadding],
CAST(@UserOption & 32 AS bit) AS [AnsiNulls],
CAST(@UserOption & 64 AS bit) AS [AbortOnArithmeticErrors],
CAST(@UserOption & 128 AS bit) AS [IgnoreArithmeticErrors],
CAST(@UserOption & 256 AS bit) AS [QuotedIdentifier],
CAST(@UserOption & …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2014 operator bitwise-comparison

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

我们可以从 SQL Server 中的 .NET 程序集调用哪些类型的方法

在 SQL Server 中注册 DLL 后(在 Programmability -> Assemblies 中),我们可以从 SQL Server 中的 .NET 程序集中调用任何类型的方法吗?还是只是静态的?

sql-server sql-clr

6
推荐指数
1
解决办法
604
查看次数

如何判断我在通过 Windows 身份验证登录时使用了哪个 Windows 组登录名

我创建了两个对应于两个 Windows 组的 SQL Server 登录名:

MachineName\MyAppAmdin
MachineName\MyAppUser
Run Code Online (Sandbox Code Playgroud)

然后在数据库中,我创建了两个具有相同名称的用户并将它们映射到登录名。

在 Windows 服务器中,我将我的域帐户添加MyDomain\MyAccountMachineName\MyAppAmdin组中。

现在我可以通过 Windows 身份验证通过MyDomain\MyAccount.

问题是,我想确切地知道我正在使用哪个 Windows 组登录,但我不知道如何。

我试过:

ORIGINAL_LOGIN()
SYSTEM_USER
SUSER_SNAME
SELECT * FROM dm_exec_sessions
Run Code Online (Sandbox Code Playgroud)

以上所有内容都会返回MyDomain\MyAccount,但我需要知道的是我是否通过MachineName\MyAppAmdin.

总结一下,我的问题是:

有没有办法准确判断当前连接使用的是哪个 Windows 组登录(或用户)?

或者有什么方法可以检查是否MyDomain\MyAccount与特定用户或登录名相关联?

我知道我可以使用 C# 或命令来解析域帐户是否属于特定的 Windows 组,但是我们有一些新的 IT 策略,所以我正在考虑使用 TSQL 实现类似结果的方法。

security sql-server t-sql sql-server-2012 logins

6
推荐指数
1
解决办法
2555
查看次数

查询以查找给定范围内包含 ASCII 字符的行

我正在使用另一个主题的一些脚本,但接受的答案不适用于我的所有数据场景。我会问我关于如何检查非 Ascii 字符的原始帖子的问题,但我还没有足够的声誉来评论或投票。

问题:

我的测试

我使用示例数据、其中一个答案中的存储过程以及用于演示该问题的查询创建了SQL Fiddle

查询 1:sample_table

-- Note: The "bad dash" row has char(150)

SELECT * FROM sample_table;

+-------------------+
|    DataColumn     |
+-------------------+
| test - good dash  |
| test – bad dash   |
+-------------------+
Run Code Online (Sandbox Code Playgroud)

查询2:其它答案约翰表示“坏破折号”行含有炭(150):

SELECT dbo.Find_Invalid_Chars(DataColumn) [Invalid Characters]
FROM sample_table
WHERE dbo.Find_Invalid_Chars(DataColumn) IS NOT NULL;

+----------------------+
|  Invalid Characters  |
+----------------------+
| test [150] bad dash  |
+----------------------+
Run Code Online (Sandbox Code Playgroud)

查询3: …

sql-server collation t-sql character-set encoding

6
推荐指数
1
解决办法
3502
查看次数

排序时如何将字符串中的数字视为数字(“A3”排序在“A10”之前,而不是之后)

对于所有这些查询:

SELECT label FROM personal.storage_disks ORDER BY label ASC;
SELECT label FROM personal.storage_disks ORDER BY label COLLATE "C" ASC;
SELECT label FROM personal.storage_disks ORDER BY label COLLATE "POSIX" ASC;
SELECT label FROM personal.storage_disks ORDER BY label COLLATE "default" ASC;
Run Code Online (Sandbox Code Playgroud)

输出总是:DISK 1, DISK 10, DISK 2, DISK 3, [...]
但是,我想要并期望:DISK 1, DISK 2, DISK 3, [...] DISK 10

我现在没有根据SELECT * FROM pg_collation;......尝试的排序规则,除非我应该使用具有神秘名称的许多非常奇怪的排序规则之一。(我什至尝试了一堆结果相同的方法。)

请注意,我已经阅读了现有的看似相关的 SE 问题以及许多关于 的文章SORT BY,但它们没有帮助,也没有为我清除任何内容。

我正在使用 PostgreSQL 12.4

postgresql collation sorting natural-sort

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