假设我有一个带有特定秘密的 SQL Server凭据保存在数据库中。我只想在数据库中保存的秘密与实际秘密不同时修改凭据。
有时,一个例子很好,所以看看这个:
CREATE CREDENTIAL [MyCred]
WITH IDENTITY = N'DOMAIN\User'
, SECRET = N'some_password';
Run Code Online (Sandbox Code Playgroud)
因此,在的密码DOMAIN\User从 更改为 后,我需要更新密钥,但前提是存储的值不匹配。即我不想盲目地删除并重新创建凭据。some_passwordsome_new_password
通过服务器主体,我可以使用该LOGINPROPERTY([login_name], 'PasswordHash')函数来获取存储在主数据库中的加密密码的哈希版本,但这似乎不适用于凭据。
有 3 个表:客户、发票和付款。带有发票和付款表的客户链接。问题是,需要检索报表明智的借方、贷方和余额。主要问题是未从日期范围获得期初余额。我提供带有查询的示例数据。
客户表:
(插入新客户时,如果他们有未分配余额与期初余额,否则保留空白(空))
CREATE TABLE BASE_Customer
(
CustomerId INT IDENTITY(1,1),
CustomerName VARCHAR(45),
SalesOpeningBalance MONEY NULL,
PRIMARY KEY(CustomerId)
)
INSERT INTO BASE_Customer (CustomerName, SalesOpeningBalance) VAlUES ('Ricky', 2500) -- with opening balance.
INSERT INTO BASE_Customer (CustomerName) VAlUES ('Smith') -- without opening balance.
Run Code Online (Sandbox Code Playgroud)
发票表:
CREATE TABLE BASE_Invoice
(
InvoiceId INT IDENTITY(1,1),
InvoiceDate DATE,
CustomerId INT,
Total MONEY,
PRIMARY KEY(InvoiceId)
)
INSERT INTO BASE_Invoice (InvoiceDate, CustomerId, Total) VALUES ('2022-01-01', 1, 500) -- Ricky
INSERT INTO BASE_Invoice (InvoiceDate, CustomerId, Total) VALUES ('2022-01-02', 2, …Run Code Online (Sandbox Code Playgroud) 我可以在 AdventureWorks 表 Person.Person 上创建以下约束:
ALTER TABLE Person.Person ADD CONSTRAINT ConstantScan CHECK (LastName <> N'Doesn''t Exist')
这告诉 SQL Server LastName 的值不能为Doesn't Exist
优化器在以下简单查询中利用了这一点:
SELECT *
FROM Person.Person
WHERE LastName = N'Doesn''t Exist'
Run Code Online (Sandbox Code Playgroud)
由于约束告诉优化器列中没有任何内容可以等于我们正在相等搜索的值(假设有可信约束),因此优化器仅执行持续扫描并且“不执行任何操作”
如果我放弃上面的约束并创建一个稍微不同的约束:
ALTER TABLE Person.Person ADD CONSTRAINT ConstantScan2 CHECK (LastName <> N'Doesn''t Exist' AND FirstName <> N'Doesn''t Exist')
并使用谓词运行查询,其结果将违反检查约束:
SELECT *
FROM Person.Person
WHERE FirstName = N'Doesn''t Exist' AND
LastName = N'Doesn''t Exist'
Run Code Online (Sandbox Code Playgroud)
我们通过键查找进行索引查找
但是,如果我跑
SELECT *
FROM Person.Person
WHERE FirstName = N'Doesn''t Exist' …Run Code Online (Sandbox Code Playgroud) sql-server constraint optimization sql-server-2019 query-performance
我已使用以下命令在数据库上启用了更改数据捕获 (CDC)exec sys.sp_cdc_enable_db
这将创建一个由cdc用户拥有的新cdc架构
select
s.*
, dp.name
from sys.schemas as s
join sys.database_principals as dp
on dp.principal_id = s.principal_id
Run Code Online (Sandbox Code Playgroud)
因为我想利用所有权链接并使用 proc 从此架构中读取数据,所以我可以将所有者更改为dbo吗?
ALTER AUTHORIZATION ON SCHEMA::cdc TO dbo
Run Code Online (Sandbox Code Playgroud)
此命令起作用并更改所有者。但疾病预防控制中心已经启用了一段时间,我担心未来会进一步破坏一些东西。
security change-data-capture owner sql-server-2019 schema-migration
我正在升级工作中的内部数据库,我们正在创建一个新的 VM 来托管它。
我看不到生成脚本以导出服务器版本 SQL Server 2019 的 SQL Server 2012 SP1 数据库的选项。对我来说是否更好:
或者
如果我安装了 SQL Server 2012 SP4,是否会给我一个选项来选择服务器版本 SQL Server 2019 的脚本?
提前感谢您的帮助。
我们正在将现有数据库移动到新的 SQL Server 2019 实例。
如果我们将兼容级别更改为 150,则没有任何效果。任务管理器显示 sql server 服务正在消耗所有可用内存并且所有查询超时并显示错误
内部资源池中的系统内存不足,无法运行此查询
RAM 被完全消耗,直到无法运行查询(所有这些都以我提到的上一个错误结束)。我们尝试过 16、32 和 64GB 的 RAM。
任何人都可以提供有关如何调试的任何提示吗?
请注意,这不是查询问题……仅更改兼容级别就足以使 SQL 开始耗尽内存。
即使运行一个简单的标量函数(内部使用多个 Substring 和 cast 调用 - 没有表或视图选择)也足以使其消耗所有可用内存。
sql-server memory functions compatibility-level sql-server-2019
给定一个简单的基于行的表,没有 PK 但有一个基于行的聚集索引,如下所示:
create clustered index [CX_PropertyValue] ON [dbo].[PropertyValue] ([PropertyId], [Value])
Run Code Online (Sandbox Code Playgroud)
然后我希望添加一个列存储索引,该索引按与上面的聚集索引相同的顺序进行分段:
create nonclustered columnstore index CS_IX_PropertyValue on dbo.PropertyValue(
PropertyId, Value
)
with (drop_existing = on, maxdop = 1); -- maxdop=1 to preserve the order by property
Run Code Online (Sandbox Code Playgroud)
MaxDop 保留顺序的提示来自:这里
然后使用以下查询报告 PropertyId 列的最小/最大 data_id,并报告 7 个段中的每个段的完整范围:
create view [Common].[ColumnStoreSegmentationView]
as
/*---------------------------------------------------------------------------------------------------------------------
Purpose: List ColumnStore table segment min/max of columns.
Source: https://joyfulcraftsmen.com/blog/cci-how-to-load-data-for-better-columnstore-segment-elimination/
https://dba.stackexchange.com/a/268329/9415
Modified By Description
---------- ---------- -----------------------------------------------------------------------------------------
2020.06.02 crokusek/inet Initial Version
---------------------------------------------------------------------------------------------------------------------*/
select --top 20000000000
s.Name as SchemaName,
t.Name …Run Code Online (Sandbox Code Playgroud) 我正在使用 SQL Server 2019 并发现了一个奇怪的行为。研究并没有让我走得更远。
有人可以解释这种行为吗?
SET QUOTED_IDENTIFIER ON;
if ((256 & @@options) = 256) print '1- quoted_identifier is on' else print '1- quoted_identifier is off';
BEGIN TRY
if ((256 & @@options) = 256) print '2- quoted_identifier is on' else print '2- quoted_identifier is off';
END TRY
BEGIN CATCH
if ((256 & @@options) = 256) print '3- quoted_identifier is on' else print '3- quoted_identifier is off';
-- SET QUOTED_IDENTIFIER OFF
-- if ((256 & @@options) = 256) print '4- quoted_identifier …Run Code Online (Sandbox Code Playgroud) 从 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_UTF8和Latin1_General_100_CS_AS_KS_WS_SC_UTF8as 排序规则之间有什么区别吗?
我有一个存储过程,它将三个大表连接在一起(每个大约有 2000 万条记录)并将记录加载到临时表中。然后将临时表中的数据合并到一个包含大约 6000 万条记录的现有表中。
服务器脱机并显示以下错误消息:
由于内存压力,AppDomain 2 (SSISDB.dbo.[runtime].1] 被标记为卸载。
使服务器重新联机后,我重新启动了 SQL 服务以清除可能一直存在的所有进程。再次开始工作,它毫无问题地完成了。
我正在运行具有 128GB RAM 的 SQL Server 2019。64 位虚拟服务器上的最大服务器内存为 117964MB。有人在任务管理器中告诉我内存使用率为 94%,这可能是问题所在。但是 SQL 不会占用所有可用内存并保留它吗?所以这似乎是按预期运行的。
sp_WhoIsActive揭示了一些状态为 'Suspended' 和 'Awaiting_Command' 的查询,但我认为这些没有太大影响。128GB 的内存似乎足够了,但我想这与它被要求做的工作有关。知道如何排除故障或防止再次发生吗?
服务器的数据驱动器约为1.6TB。连接中的两个较大的数据库是 10GB 的 1900 万行和 13GB 的 2000 万行。那些进入一个临时表,然后MERGE进入一个 26GB 的表,有 5300 万行。
请求的内存授予为 45GB,实际为 30GB。这份工作在正常工作时间之外运行,所以应该没有竞争查询,但我不能 100% 确认有人没有工作到很晚。
我确实注意到它也必须做 a CONVERT_IMPLICIT。这对所需的内存有重大影响吗?
查询计划链接:https : //www.brentozar.com/pastetheplan/?id=SyXaty7xK
sql-server-2019 ×10
sql-server ×8
memory ×2
collation ×1
columnstore ×1
constraint ×1
credentials ×1
functions ×1
optimization ×1
owner ×1
security ×1
t-sql ×1
unicode ×1
utf-8 ×1