有谁知道如何创建一个哈希计算列持久化?我不断收到以下错误。否则,我将不得不每次都使用更新或触发语句。我知道如何进行单列,但是现在这包括多列。
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) 我希望默认事务隔离级别为 SNAPSHOT。
如何在 SQL Server 2016 数据库上进行设置?
由于未知原因,我的 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 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 …
在 2 个 sql server 2016 服务器之间设置日志传送我希望我的数据库在辅助服务器上只读备用。
有一个勾选框说Disconnect users in the database when restoring backups。
如果我不勾选这个框怎么办?日志的恢复不会通过,因为它无法获得数据库的排他锁?
但是,如果有人登录数小时怎么办?几个小时没有恢复日志?
restore transaction-log log-shipping session sql-server-2016
以下不起作用。我想在 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 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
换句话说,我怎样才能摆脱下图中的sort操作符?
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
我们正在将我们的应用程序用户登录之一从dbowner更细化的权限方案更改为最终。
有没有办法从 SQL Server 2016 中跟踪权限违规?也就是说,这个新用户不能从表 dbo 中进行 SELECT。TableName以便我可以查看它并确定它是否合适。
我知道我可以从程序方面捕获错误并记录它们,但是如果数据库可以为我记录这些错误,我宁愿不依赖它。
sql-server-2016 ×10
sql-server ×9
audit ×1
log-shipping ×1
optimization ×1
order-by ×1
performance ×1
restore ×1
security ×1
session ×1
sql-clr ×1
ssdt ×1
synonyms ×1
unit-test ×1
varchar ×1