标签: sql-server-2016

如何为多列创建哈希计算列?

有谁知道如何创建一个哈希计算列持久化?我不断收到以下错误。否则,我将不得不每次都使用更新或触发语句。我知道如何进行单列,但是现在这包括多列。

CREATE TABLE [dbo].[CustomerTransactiont]
(
    CustomerTransactionId int primary key identity(1,1),
    CustomerName varchar(255),
    Price decimal(10,2),
    Quantity int,

    RowHash as hashbytes('SHA2_512', (select CustomerName
    ,Price
    ,Quantity for xml raw)) persisted
) 

Msg 1046, Level 15, State 1, Line 7
Subqueries are not allowed in this context. Only scalar expressions are allowed.
Run Code Online (Sandbox Code Playgroud)

database-design sql-server sql-server-2016 computed-column

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

是否可以为 SQL Server 中的所有连接设置 DEFAULT TRANSACTION ISOLATION?

我希望默认事务隔离级别为 SNAPSHOT。

如何在 SQL Server 2016 数据库上进行设置?

sql-server snapshot-isolation sql-server-2016

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

删除字符串结尾的不可见空字符

由于未知原因,我的 VARCHAR(1000) 列之一中的许多字符串都以不可见字符结尾。

declare @BrokenString varbinary(max)=0x6D0079002000620075006700670065006400200073007400720069006E00670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F003F00;
select cast(@BrokenString as nvarchar(max)) -- returns 'my bugged string'
select cast(@BrokenString as nvarchar(max)) + ' is bugged' -- still returns 'my bugged string' !

declare @BrokenStringTable table (Brokey nvarchar(max));
insert into @BrokenStringTable
select cast(@BrokenString as nvarchar(max));
select * from @BrokenStringTable for json auto;
Run Code Online (Sandbox Code Playgroud)

select * from @BrokenStringTable for json auto;语句的输出如下所示:

[{"Brokey":"my bugged string\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000??"}]
Run Code Online (Sandbox Code Playgroud)

如何检测表中哪些记录包含这些字符?似乎使用 charindex、where+like 和任何其他正常解决方案都不适用于这些。

sql-server varchar sql-server-2016

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

SQLServer 行级安全性 - 从数据库内实施

在单个 SQL Server 2016 数据库上运行多租户应用程序。我有一个 RLS(行级安全性)谓词customer_id(每个租户唯一)并且该列存在于所有表中。

CREATE FUNCTION dbo.[RLSPredicate] (@CustomerId bigint)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS RLSPredicateResult WHERE (@CustomerId = 
CAST(SESSION_CONTEXT(N'customer_id') AS bigint))

GO

 -- two table example
 CREATE SECURITY POLICY [dbo].[RLSPolicy] 
 ADD FILTER PREDICATE [dbo].[RLSPredicate] ([customer_id]) ON [dbo].[user],  
 ADD FILTER PREDICATE [dbo].[RLSPredicate] ([customer_id]) ON [dbo]. 
  [user_email]
  WITH (STATE = ON, SCHEMABINDING = ON)
  GO

  -- Sample Query 
  EXEC sp_set_session_context @key=N'customer_id', @value='1231312'
  select top 1000 * from [user] where customer_id = 1231312
Run Code Online (Sandbox Code Playgroud)

使用上面的设计,EXEC …

sql-server row-level-security sql-server-2016

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

恢复备份时不在数据库中设置断开用户的惩罚是什么?

在 2 个 sql server 2016 服务器之间设置日志传送我希望我的数据库在辅助服务器上只读备用。

有一个勾选框说Disconnect users in the database when restoring backups

如果我不勾选这个框怎么办?日志的恢复不会通过,因为它无法获得数据库的排他锁?

但是,如果有人登录数小时怎么办?几个小时没有恢复日志?

在此处输入图片说明

restore transaction-log log-shipping session sql-server-2016

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

如何为 SQL Server 中的列创建同义词?

以下不起作用。我想在 SQL Server 2017 中的列上创建同义词。我将如何执行此操作?

CREATE SYNONYM dbo.[ProductTest] for [dbo].[Product].[ProductId]
GO

select ProductTest from dbo.Product
Run Code Online (Sandbox Code Playgroud)

sql-server synonyms sql-server-2016 sql-server-2017

3
推荐指数
2
解决办法
2779
查看次数

创建汇编 System.DirectoryServices.AccountManagement.dll 而不启用 TRUSTWORTHY

首先,这是针对 SQL Server 2016 的。如果我在 2017+ 上,我会使用sp_add_trusted_assembly. 在问这个问题之前只是想澄清一下。

如何在不使用 的情况下注册程序集System.DirectoryServices.AccountManagement.dllTRUSTWORTHY ON?我无法使用System.DirectoryServices.dll生成的非对称密钥使其工作。AccountManagement dll 的签名与System.DirectoryServices.dll不同。

我什至尝试从System.DirectoryServices.AccountManagement.dll创建一个单独的非对称密钥,但这会导致:

消息 15468,级别 16,状态 7,行 XXXXX
在生成非对称密钥期间出错。

这是我为尝试创建此程序集而编写的测试脚本。

USE master

IF DB_ID('CLR_Test') IS NULL BEGIN
    CREATE DATABASE CLR_Test
END
GO

USE [CLR_Test]
GO

EXEC sp_configure @configname=clr_enabled, @configvalue=1
GO
RECONFIGURE
GO

/*************************************************************************************/
-- DROP OBJECTS IF FOUND FIRST
/*************************************************************************************/

-- DROP System.DirectoryServices.AccountManagement
IF EXISTS(SELECT 1 FROM sys.assemblies WHERE name = 'System.DirectoryServices.AccountManagement') BEGIN 
    RAISERROR( 'DROP ASSEMBLY [System.DirectoryServices.AccountManagement]', 0, …
Run Code Online (Sandbox Code Playgroud)

security sql-server sql-clr active-directory sql-server-2016

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

@RC 在 SSDT SQL Server 单元测试中是什么意思?

在 Sql Server 单元测试、SSDT 中,@RC 代表什么?它是指行数还是行列?团队想了解,我们已经使用它很长时间了,很好用的工具,只是好奇。

在此处输入图片说明

在此处输入图片说明

sql-server visual-studio unit-test ssdt sql-server-2016

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

添加一个额外的“order by”列给了我一个更糟糕的计划

换句话说,我怎样才能摆脱下图中的sort操作符?

在此处输入图片说明

上图显示了以下2个select的执行计划

                SELECT   TOP 1 so.OrgType, 
                              ch.Status, 
                              rcs.DBSstatusDescription, 
                              cid.ApplicationId
                   FROM   tbl_application_crb_initialData cid

                   INNER JOIN  tbl_season_organisationId so
                          ON   cid.OrganisationId = so.OrgId

                   LEFT JOIN  tbl_crbHistory ch  
                          ON  cid.ClientReference = ch.ClientReference

                   LEFT JOIN  ref_crbStatus rcs
                         ON   ch.Status = rcs.statusId    

                   ORDER BY  cid.DateAdded DESC, ch.DateAdded DESC

                SELECT   TOP 1 so.OrgType, 
                              ch.Status, 
                              rcs.DBSstatusDescription, 
                              cid.ApplicationId
                   FROM   tbl_application_crb_initialData cid

                   INNER JOIN  tbl_season_organisationId so
                          ON   cid.OrganisationId = so.OrgId

                   LEFT JOIN  tbl_crbHistory ch  
                          ON  cid.ClientReference = ch.ClientReference

                   LEFT JOIN  ref_crbStatus rcs
                         ON   ch.Status = rcs.statusId …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization order-by sql-server-2016 query-performance

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

跟踪拨款违规

我们正在将我们的应用程序用户登录之一从dbowner更细化的权限方案更改为最终。

有没有办法从 SQL Server 2016 中跟踪权限违规?也就是说,这个新用户不能从表 dbo 中进行 SELECT。TableName以便我可以查看它并确定它是否合适。

我知道我可以从程序方面捕获错误并记录它们,但是如果数据库可以为我记录这些错误,我宁愿不依赖它。

sql-server audit sql-server-2016

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