标签: sql-server-2016

内存优化表不支持 DDL 语句 CREATE、ALTER 和 DROP 上的数据库和服务器触发器

当我尝试删除内存优化表时,出现此错误。我使用的是 sql server 2016 sp1

内存优化表不支持 DDL 语句 CREATE、ALTER 和 DROP 上的数据库和服务器触发器。

我已经放弃了 sec 策略和第二个索引。我不能删除 spidfilter,因为你必须有 1 个 MOT 索引。只是想看看这是否有所作为。它没。

代码如下:

create table dbo.MOT_tmpTableName
    (
    Col1    int, 
    Col2    int,
    Col3    smalldatetime,
    Col4    smalldatetime,
    Col5    varchar(25),
    Col6    date, 
    Col7    smallint, 
    Col8    smallint,
    Col9    smallint,
    Col10    smallint,

    SpidFilter          smallint    not null   DEFAULT (@@spid),  

    index nIX_SpidFilter nonclustered (SpidFilter),  
    index nIX_Col1_Col2_Col3 nonclustered (Col1, Col2, Col3),

    CONSTRAINT CHK_MOT_tmpTableName_SpidFilter  
        CHECK ( SpidFilter = @@spid ),  
)  
WITH  
    (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY);  
go  


create security …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2016

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

为什么FOR子句不能与带有时态表的SQL Server 2016中的别名一起使用?

我有一个带有时态表的SQL Server 2016数据库.一个时态表称为公司.我试图查询它以获取当前记录和所有历史记录.我首先尝试了以下查询:

select *
from Company c
FOR SYSTEM_TIME all
Run Code Online (Sandbox Code Playgroud)

并得到以下错误: 'FOR'附近的语法不正确.

但是,如果我在没有别名的情况下尝试它,它可以正常工作:

select *
from Company
FOR SYSTEM_TIME all
Run Code Online (Sandbox Code Playgroud)

我找不到任何关于此的文档 - 它是合法约束,已知问题还是其他什么?

sql-server temporal-database sql-server-2016

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

从查询存储报告中删除查询

我刚刚开始在 SQL Server 2016 中使用查询数据存储,它确实非常有用。我遇到的问题是,服务器上有许多服务正在监视服务代理队列,因此它们的 WAITFOR 语句始终在报告中显示为运行时间最长的查询。这本身不是问题,但它们运行的​​时间太长,以至于扭曲了报告上的持续时间轴,使得所有其他查询几乎不可见。

有什么方法可以让查询存储忽略查询,这样它就不会显示在报告中吗?

sql-server-2016 sql-query-store

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

Nodejs mssql中的SQL Server连接超时错误

执行几个 SQL 语句后总是出现以下错误。

我在用

var sql = require("mssql");
Run Code Online (Sandbox Code Playgroud)

(节点:12240)[DEP0064] 弃用警告:tls.createSecurePair() 已弃用。请改用 tls.Socket。warning.js:18(节点:12240)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:2):ConnectionError:无法连接到Server-100:15000ms内未定义 warning.js:18(节点:12240)[DEP0018] DeprecationWarning:未处理的承诺拒绝已被弃用。将来,未处理的 Promise 拒绝将会以非零退出代码终止 Node.js 进程。warning.js:18(节点:12240)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:4):ConnectionError:无法连接到Server-100:15000ms内未定义 warning.js:18

ConnectionError: Failed to connect to server-100:undefined in 15000ms
 at Connection.tedious.once.err (d:\API\node_modules\mssql\lib\tedious.js:216:17)
    at Object.onceWrapper (events.js:316:30)
    at emitOne (events.js:115:13)
    at Connection.emit (events.js:210:7)
    at Connection.connectTimeout (d:\API\node_modules\tedious\lib\connection.js:634:12)
    at ontimeout (timers.js:469:11)
    at tryOnTimeout (timers.js:304:5)
    at Timer.listOnTimeout (timers.js:264:5)
Run Code Online (Sandbox Code Playgroud)

以下是代码:

module.exports = function (data) {

    return new Promise(function (resolve, reject) {

        var database = new sql.ConnectionPool({
        user: 'sa',
        password: 'password',
        server: 'Server-100',
        database: 'SQLDB',
        options: {
            encrypt: true, …
Run Code Online (Sandbox Code Playgroud)

sql-server node.js node-mssql tedious sql-server-2016

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

是否可以通过明文类型确定ENCRYPTBYKEY最大返回值?

我将加密现有表中的几个字段。基本上,将使用以下加密技术:

CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'sm_long_password@'
GO

CREATE CERTIFICATE CERT_01
WITH SUBJECT = 'CERT_01'
GO

CREATE SYMMETRIC KEY SK_01
WITH ALGORITHM = AES_256 ENCRYPTION
BY CERTIFICATE CERT_01
GO


OPEN SYMMETRIC KEY SK_01 DECRYPTION
BY CERTIFICATE CERT_01

SELECT ENCRYPTBYKEY(KEY_GUID('SK_01'), 'test')

CLOSE SYMMETRIC KEY SK_01

DROP SYMMETRIC KEY SK_01
DROP CERTIFICATE CERT_01
DROP MASTER KEY
Run Code Online (Sandbox Code Playgroud)

ENCRYPTBYKEY返回的最大varbinary大小为 8,000 字节。知道要加密的表字段(例如:nvarchar(128)varchar(31)bigint),如何定义新varbinary类型长度?

t-sql sql-server encryption sqldatatypes sql-server-2016

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

如何在 SQL Server 2016+ 中使用查询存储查找哪个程序或用户执行了查询

启用查询存储后,如何查找执行查询的人。例如,在跟踪收集的情况下,TRC 文件将获取主机名和程序详细信息以供查询,而在扩展事件的情况下,我们有 XEL 文件将获取主机名和程序详细信息。我们尝试了代码

SELECT des.program_name,
des.host_name,
*
FROM sys.query_store_query_text qt -- Query Text
JOIN sys.query_store_query q ON qt.query_text_id = q.query_id -- Query Data
JOIN sys.query_store_plan qp on qp.query_id = q.query_id --  Query Plan
join sys.dm_exec_requests der on der.query_hash = q.query_hash -- Get session id for query
join sys.dm_exec_sessions des on des.session_id = der.session_id -- Session Info
order by q.last_execution_time desc
Run Code Online (Sandbox Code Playgroud)

下面的 DMV 返回查询哈希 (query_hash) 的空值,因此上面的查询没有数据

select * from sys.dm_exec_requests der
select * from sys.dm_exec_sessions des
Run Code Online (Sandbox Code Playgroud)

sql-server performance monitoring sql-server-2016 sql-query-store

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

Max()Over Partition By with date conditions

如何将以下结果变为黄色?

在此输入图像描述

我想找到上一年的最高分(不包括当前日期)和Name1和Parent1的分区

我已经尝试了以下没有给出所需结果的内容,它只返回正确分区的max,但是在所有日期之间.

select 
[VDate]
,[Name1]
,[Parent1]
,[Score]
,max(case when [VDate] > dateadd(year, -1, [VDate]) then [Score] else null end) over (partition by [Name1], [Parent1]) AS MaxScoreInPreviousLast12Months
from [dbo].[Control]
Run Code Online (Sandbox Code Playgroud)

表数据:

CREATE TABLE Control
    ([VDate] datetime, [Name1] varchar(10), [Parent1] varchar(10), [Score] int);

INSERT INTO Control ([VDate], [Name1], [Parent1], [Score])
VALUES
('2018-08-01 00:00:00', 'Name1', 'Parent1', 80),
('2018-07-01 00:00:00', 'Name1', 'Parent1', 85),
('2018-06-01 00:00:00', 'Name1', 'Parent1', 90),
('2017-09-01 00:00:00', 'Name1', 'Parent1', 100),
('2017-08-01 00:00:00', 'Name1', 'Parent1', 95),
('2017-07-01 00:00:00', 'Name1', 'Parent1', 70),

('2018-08-01 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2016

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

How to use CASE statement inside a WHERE with an IN clause?

I am trying to do the following (pseudocode since it doesn't compile):

declare showListedOrSold  int = 1 -- get value from config table

select *
from table
where CASE WHEN @showListedOrSold = 0 THEN id IN (1, 2, 5, 6, 10, 11) 
             WHEN @showListedOrSold = 1 THEN id IN (1, 5, 6, 10, 11) 
             WHEN @showListedOrSold = 2 THEN id IN (2) 
      END
Run Code Online (Sandbox Code Playgroud)

Basically depending on value of showListedOrSold, it should bring back certain id values.

The statement is …

sql sql-server sql-server-2016

6
推荐指数
3
解决办法
80
查看次数

SQL Server 2016:将DATETIME2(3)与DATETIME一起加入

在加盟时,我得到意想不到的结果DATETIME2(3)DATETIME与PK列,在SQL Server 2016年

我有下表:

CREATE TABLE DATETIME_TEST 
(
    [DATETIME] DATETIME NOT NULL,
    [DATETIME2_3] DATETIME2(3)
);

ALTER TABLE DATETIME_TEST 
    ADD CONSTRAINT PK_DATETIME_TEST PRIMARY KEY ([DATETIME]);

INSERT INTO DATETIME_TEST ([DATETIME], [DATETIME2_3])
VALUES ('20020202 02:02:02.000', '20020202 02:02:02.000'), 
       ('20020202 02:02:02.003', '20020202 02:02:02.003'), 
       ('20020202 02:02:02.007', '20020202 02:02:02.007'),
       ('2019-04-28 07:23:29.447', '2019-04-28 07:23:29.447');

SELECT * 
FROM DATETIME_TEST 
WHERE CONVERT(DATETIME2(3), [DATETIME]) = [DATETIME2_3]
Run Code Online (Sandbox Code Playgroud)

结果 :

DATETIME                  DATETIME2_3
-------------------------------------------------
2002-02-02 02:02:02.000   2002-02-02 02:02:02.000
2002-02-02 02:02:02.003   2002-02-02 02:02:02.003
2002-02-02 02:02:02.007   2002-02-02 02:02:02.007
2019-04-28 07:23:29.447   2019-04-28 07:23:29.447 …
Run Code Online (Sandbox Code Playgroud)

sql datetime datetime2 sql-server-2016

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

连接表但只允许使用记录一次

CREATE TABLE #A (UpperLimit NUMERIC(4))
CREATE TABLE #B (Id NUMERIC(4), Amount NUMERIC(4))

INSERT INTO #A VALUES 
    (1000), (2000), (3000)
INSERT INTO #B VALUES 
    (1, 3100), 
    (2, 1900), 
    (3, 1800), 
    (4, 1700), 
    (5, 900), 
    (6, 800)
Run Code Online (Sandbox Code Playgroud)

给定这两个表,我想将表 A 连接到 B ON B.Amount < A.UpperLimit,但表 B 中的每条记录只能使用一次,因此所需的输出将是:

期望的输出

我可以通过将表 B 的记录放入临时表中,将光标悬停在表 A 上获取顶部记录 < UpperLimit 并从临时表或其他一些编程解决方案中删除该记录来轻松地做到这一点,但我想避免这种情况,我非常确定这可以通过“正常”(递归 CTE?分区?)查询来完成。

t-sql sql-server sql-server-2016

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