标签: sql-server-2016

SQL SERVER:使用命名默认约束创建表

我想创建一个带有字段默认约束的表。我知道我可以在创建表后添加约束,但我需要在一个命令中创建表和指定的默认约束,如下所示

create table table1(field1 varchar(25), constraint df_table1_field1 default('a') for field1)

不幸的是,这不起作用。

有什么建议么?

sql-server sql-server-2016

5
推荐指数
1
解决办法
2172
查看次数

SQL Server 服务 - 未自动启动,“系统找不到指定的文件”,但手动启动正常

这是一个奇怪的问题,我已经没有办法解决这个问题了。这就是问题所在,这是我能总结的最好的。

\n

当 SQL Server 引擎和代理服务设置为“自动”时,服务器首次启动时不会启动。查看事件查看器,发现以下错误:

\n
\n

由于以下错误,MSSQLSERVER 服务无法启动:\n系统找不到指定的文件。

\n
\n

但是,如果我在启动后进入服务并手动启动服务,它们就会毫无问题地开始运行。更令人困惑的是,这并不限于单个服务器。如果有帮助的话,它们都是集群/AG 的一部分。

\n

翻阅了一些不同的网站和帖子,这是我的比较:

\n

https://blog.sqlauthority.com/2020/01/16/sql-server-event-id-7000-the-system-cannot-find-the-file-specified/

\n
\n

这与我们在事件日志中看到的错误相同。当我查看服务的属性时,我发现 \xe2\x80\x9cPath toexecutable\xe2\x80\x9d 中提到的路径是无效路径。

\n
\n

不适用于此处。我可以手动启动服务,并且服务和注册表中的路径是正确的。

\n

正在使用域帐户(不是 gMSA),并且密码设置正确。

\n

sql-server sql-server-2016

5
推荐指数
1
解决办法
2694
查看次数

门号 1、2 或 3?...安全更改、错误或从 SQL Server 2016 就地升级到 SQL Server 2019 的升级失败?

我做了什么:

ServerA最近,我测试了在运行 SQL Server 2016 (SP 2 CU17) 标准版到 SQL Server 2019 标准版的开发服务器上进行就地升级。(我知道这不是进行升级的首选方法,但同样只是在开发服务器上进行测试,所以没有坏处。)

在安装向导过程中,其中一个步骤挂起很长时间,因此我的同事单击“下一步”按钮跳过该步骤。我不太记得那是哪一步,但我相信它是产品更新或安装设置文件步骤。我记得接下来它说它跳过了几种不同类型的下载。剩下的安装一切顺利,顺利完成。

我能够启动实例、登录并访问我们的数据库。然后,我将数据库兼容级别提高到 150(SQL Server 2019 的兼容级别)。我运行了一些性能测试查询,然后最终决定打开旧基数估计器。到目前为止一切似乎都正常。

发生的事情是:

然后我注意到 上有一些有趣的事情ServerB,这是另一台已经运行 SQL Server 2019 的开发服务器,并且有一个指向 的链接服务器设置ServerA。一切都运行良好ServerB,除了任何跨链接服务器引用视图的查询,ServerA该视图在其中使用架构绑定标量函数。我收到错误The EXECUTE permission was denied on the object 'MyFunction', database 'Database1OnServerA', schema 'dbo'。如果我返回ServerA并更改该函数并WITH SCHEMABINDING注释掉该行,则ServerB可以从再次引用该函数的视图中进行选择。

附加信息:

链接服务器对象中使用的帐户是一个 SQL Server 登录帐户ServerA,只有映射db_datareader到它的角色(当然除了数据库角色之外)。没有对其设置额外的细粒度权限,并且也仅分配有服务器角色。Database1ServerAPublicPublic

有趣的是,我的问题的另一种解决方案是向链接服务器帐户或专门授予链接服务器帐户的EXECUTE权限。但在升级到 SQL …

sql-server upgrade linked-server sql-server-2016 sql-server-2019

5
推荐指数
1
解决办法
227
查看次数

服务器重新启动后查询存储强制计划是否仍然存在?

想问一下,因为找不到这个信息。

服务器重新启动后查询存储强制计划是否仍然存在?

在哪些情况下,通过查询存储强制执行的计划不会保持有效?

sql-server sql-server-2016 query-store

5
推荐指数
1
解决办法
714
查看次数

修补 SQL Server 2016

我的大多数 SQL Server 都使用 2016 SP2。安全小组已确定我需要应用更高版本的安全更新,由于今年 SP2 不再受支持,我计划将其修补到 SP3。

问题是我从未真正修补过 SQL Server,并且想知道应用该服务包时应遵循什么好的流程。我在网上看到了一些,大致相同,但只是需要一些关于最佳方法的意见。

通过在线查看这些流程,我遇到的一些问题是:

  • 我假设 SQL Server 实例需要重新启动。这是安装补丁时自动完成的吗?
  • 是否需要停止实例上的所有活动?即,是否需要关闭与实例通信的所有应用程序服务?
  • SQL 代理也应该停止吗?

sql-server service-pack sql-server-2016 patching

5
推荐指数
2
解决办法
2963
查看次数

where 子句中的 dateadd - 在这种特定情况下如何避免完全扫描?

我有以下查询:

SELECT      u.userId,
            app.applicationId
FROM        app.application                 AS app
INNER JOIN  app.applicant                   AS ap   
            ON ap.applicantId = app.applicantId
INNER JOIN  usr.[user]                      AS u    
            ON u.userId = ap.userId
LEFT JOIN   msg.emailTemplateSent           AS t    
            ON t.toUserId = u.userId 
           AND t.emailTemplateName = 'v4_before_sixWeek_latestFlight_reminder'

WHERE       Convert(Date, GETUTCDATE())  = 
            DATEADD(week,-6,Convert(Date, app.flightDateLatest ))

AND         t.emailEventId IS NULL

ORDER BY    app.applicationId ASC
Run Code Online (Sandbox Code Playgroud)

请再次注意where子句的第一行:

Convert(Date, GETUTCDATE())  = DATEADD(week,-6,Convert(Date, app.flightDateLatest ))
Run Code Online (Sandbox Code Playgroud)

我可以以可以使用我的索引的方式更改此设置吗?索引实际上被使用了,但它是一个完整的扫描。

在此输入图像描述

也可以在这里看到:

在此输入图像描述

这是我的索引定义:

USE [APCore];
CREATE NONCLUSTERED INDEX i_flightDateLatest  
ON [app].[application] ( flightDateLatest  ASC  )  
INCLUDE ( [applicantId] , …
Run Code Online (Sandbox Code Playgroud)

index sql-server execution-plan sql-server-2016 query-performance

5
推荐指数
1
解决办法
1251
查看次数

消息 39011 SQL Server 无法与 LaunchPad 服务通信

我在 SQL Server 2016 CTP 30 中使用新的“R”脚本。
终于让它工作了,感谢这个站点。

我遇到了一个问题,我相信其他人也会遇到这个问题。

突然之间“R”脚本不再工作,他们返回了这个错误:

消息 39011,级别 16,状态 1,第 1 行
SQL Server 无法与 LaunchPad 服务进行通信。请验证服务的配置。

sql-server sql-server-2016

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

使用 SSIS 使用 Rest Api

我尝试使用Rest API (JSON export)with SSIS。由于似乎 aREST source不受支持,SSIS我正在寻找解决方案,但只能找到SSIS JSON Source

是否有非专有解决方案,或者新的 SQL Server 2016 甚至支持此功能?
我检查了一下,也找不到任何具体的东西。

sql-server ssis json sql-server-2016

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

我怎样才能更好地处理不需要的、非错误的情况?

在编写程序时,我偶尔会遇到我想中止程序的情况,即使这种情况不一定会触发错误。

比方说,如果我不希望 John 能够运行这个程序,我会做这样的事情:

IF @UserName = 'John'
BEGIN
    RAISERROR('John, get out', 16, 1);
    RETURN 1;
END
Run Code Online (Sandbox Code Playgroud)

我真的没有一个很好的理由返回 1,它主要是 shell 脚本的残余,我愿意接受更好的方法来做到这一点。

是否有更好的方法来返回错误消息并将控制权返回给调用者,以应对严格来说不是错误的不需要的情况?我对减少字符或代码行数不感兴趣。我只是有一种直觉说“这可能不是解决这个问题的最佳方法”,我很好奇是否有更聪明的方法来做到这一点。

一种替代方法是始终使用TRY/CATCH,因为RAISERROR严重性为 1-19 会将控制权交给 catch 子句。

例子:

BEGIN TRY
    PRINT 'Before RAISERROR';
    RAISERROR('Time for errors', 16, 1);
    PRINT 'After RAISERROR'
END TRY
BEGIN CATCH
    DECLARE @Msg NVARCHAR(255) = ERROR_MESSAGE()
    PRINT 'Inside CATCH'
    RAISERROR(@Msg, 16, 1)
END CATCH
Run Code Online (Sandbox Code Playgroud)

输出:

IF @UserName = 'John'
BEGIN
    RAISERROR('John, get out', 16, 1);
    RETURN 1;
END
Run Code Online (Sandbox Code Playgroud)

缺点:需要TRY/CATCH块的存在。

sql-server error-handling sql-server-2016

4
推荐指数
1
解决办法
789
查看次数

Microsoft SQL Server 2016 调用 1000 次的存储过程性能下降

语境 :

小表,存储过程更新表,前两千命中没问题。在第一次点击后,它开始以蜗牛般的速度爬行。此存储过程在我们当前使用调用 C# 应用程序的 SQL Server 2008 R2 环境中没有问题。在我们针对 SQL Server 2016 的新测试环境中,我们看到了这个问题。查询的违规部分处理了一个 where 子句,它对不等于小表更新的参数的列进行了四次比较:

WHERE A.Column1 <> @param1 OR A.Column2 <> @param2     etc..
Run Code Online (Sandbox Code Playgroud)

我的假设是参数嗅探,但已经通过各种查询提示排除了这一点。

我也试过:

  • 更改为选择不更新
  • 玩并行度 (MAXDOP)
  • 更新统计信息并重新编译,甚至在中间进行
  • 索引的各种变化
  • X 次迭代后在调用 C# 代码时重置连接池
  • 删除任何交易控制

似乎可以解决问题的唯一更改是删除 where 子句并将逻辑推送到 setter:

SET A.Column1 = CASE 
        WHEN A.Column1 <> @param1
            THEN @param1
        ELSE A.Column1
        END
Run Code Online (Sandbox Code Playgroud)

我不喜欢更改代码,但我在网上找不到其他资源可以回答为什么 SQL Server 2016 会崩溃。

任何帮助,将不胜感激。

performance sql-server stored-procedures sql-server-2016 query-performance

4
推荐指数
1
解决办法
5273
查看次数