我想以更直接和更一般的方式重新提问:
如何创建一个表来存储可能是多种不同类型的值?
就我而言,这些值提供有关事件的诊断信息。例如:事件发生 -> 存储来自多个 PLC 的读数,其中包含有关事件的相关信息。PLC 可以监控任何类型的数据。
我能想到的一些例子:
我们已经开始将存储过程命名为[16_TestStoredProc]. 像这样命名存储过程有什么含义吗?
我不会解释我们为什么要这样做。这不是我有问题,而是会产生任何影响。
这是另一个查询优化器难题。
也许我只是高估了查询优化器,或者我遗漏了一些东西 - 所以我把它放在那里。
我有一张简单的桌子
CREATE TABLE [dbo].[MyEntities](
[Id] [uniqueidentifier] NOT NULL,
[Number] [int] NOT NULL,
CONSTRAINT [PK_dbo.MyEntities] PRIMARY KEY CLUSTERED ([Id])
)
CREATE NONCLUSTERED INDEX [IX_Number] ON [dbo].[MyEntities] ([Number])
Run Code Online (Sandbox Code Playgroud)
有一个索引和几千行,Number均匀分布在值 0、1 和 2 中。
现在这个查询:
SELECT * FROM
(SELECT
[Extent1].[Number] AS [Number],
CASE
WHEN (0 = [Extent1].[Number]) THEN 'one'
WHEN (1 = [Extent1].[Number]) THEN 'two'
WHEN (2 = [Extent1].[Number]) THEN 'three'
ELSE '?'
END AS [Name]
FROM [dbo].[MyEntities] AS [Extent1]
) P
WHERE P.Number = 0;
Run Code Online (Sandbox Code Playgroud)
是否 …
我有一个托管(共享)SQL Server 数据库,我想添加只读登录名。(此登录名将用于构建 Power BI 数据可视化。)
仔细研究一下,事情比我想象的要复杂得多。
理想情况下,来宾用户是只读的,我只需为来宾帐户添加登录信息即可。但该帐户最初似乎没有登录权限。
有人可以提供最简单的方法(对数据库更改最少的方法)来添加具有只读访问权限的登录吗?
另外,有没有办法阻止访问某些表,例如我的用户成员资格表?
我有一个带有触发器的视图instead of,我尝试将其与 EF Core 一起使用,EF Core 尝试以merge语句的形式将批量插入一起。这是我的表格和视图:
create table tbl (id uniqueidentifier not null primary key, data nvarchar(max) null)
go
create view vwTbl as select * from tbl
go
create trigger vwTblInsert on vwTbl instead of insert as
insert into tbl (id, data)
select id, data
from inserted
go
Run Code Online (Sandbox Code Playgroud)
以下是 EF 生成的近似 SQL:
declare @inserted1 table ([id] uniqueidentifier);
merge vwTbl using (
values (newid(), 'xxx')
) as i (id, data) on 1=0
when not matched then …Run Code Online (Sandbox Code Playgroud) 我有一个 SQL Server 2012 实例使用了更多的 RAM。
SQL Server 进程使用大约 22.5GB RAM:
该实例配置为最大使用 10GB:
这比预期的要多得多。(这将导致服务器崩溃,我们必须重新启动才能恢复)。
我用这个查询检查了内存使用情况(职员):
select type, name, pages_kb/1024.0/1024.0 "size Gb" from sys.dm_os_memory_clerks
order by pages_kb desc
Run Code Online (Sandbox Code Playgroud)
SQL Server 似乎只使用了大约 7GB RAM:
我知道它是 SQL Server 的旧版本(遗憾的是它没有修补到最新版本),但我无法找到有关 SQL Server 2012 SP2 中内存泄漏的任何明确文档。
我应该在哪里查找为什么 SQL Server 使用了大约 200% 的资源?
此实例上有一个链接服务器。很多使用 SQL 驱动程序(SQLNCLI 和 SQLNCLI11),但也有一些使用我以前从未见过的“HFSQL 的 PC SOFT OLE DB 提供程序”。
有什么方法可以“证明”这个驱动程序有问题吗?客户端可能不会同意基于假设更改设置,因此如果有任何方法(除了禁用之外)可以清楚地显示链接服务器正在使用多少 RAM,那将是无价的。
我们在 SQL Server VM 上看到许多非生成调度程序错误。阅读 Microsoft Docs 上的此链接,建议我们启用内存中的锁定页面。
我对内存中的锁定页面没有太多经验,并且我读过很多博客文章,其中对打开它表示谨慎。
服务器详细信息
我正在向具有内存锁定页面经验的人寻求建议,特别是在具有大内存的虚拟机上。或者是否还有其他我没有想到的选择?
我有一个 SQL 查询,用于在表中查找某个日期范围内的值。
如果没有找到记录,我想生成具有默认值的行。
表现有记录之一的示例:
| 设备ID | 时间 | 语境 | 价值 |
|---|---|---|---|
| 1 | 2022-02-10 | 连接的 | 错误的 |
因此,限制时间列在 2022-02-07 和 2022-02-10 之间的查询必须为 2 月 7 日、8 日和 9 日创建假行,但不能为 10 日创建假行,因为该行已经存在。
预期结果:
| 设备ID | 时间 | 语境 | 价值 |
|---|---|---|---|
| 1 | 2022-02-7 | 伪造的 | 错误的 |
| 1 | 2022-02-8 | 伪造的 | 错误的 |
| 1 | 2022-02-9 | 伪造的 | 错误的 |
| 1 | 2022-02-10 | 连接的 | 错误的 |
我怎样才能做到这一点?使用递归 CTE?
我知道 varchar(max) 和 nvarchar(max) 允许保存最多 2GB 的数据,但这与这个问题无关。
一个页面 8KB = 8192 字节
在 varchar 中,1 个字符就是 1 个字节。而在 nvarchar 中,1 个字符是 2 个字节。
varchar 允许有 8000 个字符(8000 字节)。而 nvarchar 允许有 4000 个字符(8000 字节)。
这是因为页面大小是 8192 字节吗?
在本演示中,我使用的是2013 版 Stack Overflow 数据库和 SQL Server 2022 CTP2,但回溯到 SQL Server 2017 也是有效的,这是我想检查的最早版本。
对于此函数,SQL Server 跟踪该函数所花费的执行时间:
CREATE OR ALTER FUNCTION
dbo.ScoreStats
(
@UserId int
)
RETURNS
@out table
(
TotalScore bigint
)
WITH SCHEMABINDING
AS
BEGIN
INSERT
@out
(
TotalScore
)
SELECT
TotalScore =
SUM(x.Score)
FROM
(
SELECT
Score =
SUM(p.Score)
FROM dbo.Posts AS p
WHERE p.OwnerUserId = @UserId
UNION ALL
SELECT
Score =
SUM(c.Score)
FROM dbo.Comments AS c
WHERE c.UserId = @UserId
) AS x; …Run Code Online (Sandbox Code Playgroud) sql-server ×10
date-math ×1
functions ×1
memory ×1
merge ×1
ssms ×1
trigger ×1
users ×1
wait-types ×1