我总是对一些神秘的 t-sql 行为感到困惑,如下所示
-- Create table t and insert values.
use tempdb
CREATE TABLE dbo.t (a INT NULL);
-- insert 3 values
INSERT INTO dbo.t values (NULL),(0),(1);
GO
set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null
go
-- expect 3 rows returned but only 2 returned (without null value row)
select * from dbo.t where a = a
Run Code Online (Sandbox Code Playgroud)
这不是关于如何检索表中的所有行,也不是关于避免使用 ANSI_NULLS。
我只是想征求一些见解,为什么 t-sql 会这样。
我在 sys.objects 中看到 [Type] 列的奇怪(未记录)值。值为“ST”,如下图(注意,dbo.Record 是一个用户表)
有谁知道这个“ST”值是什么意思?(这是在 SQL Server 2014 开发版中)
我对这个问题困惑了将近 1 周。希望我们社区中有人遇到过同样的问题并且已经找到了解决方案。
所以这是我的问题:
根据我们公司的政策,我们希望数据库邮件能够在启用 TLS 1.2 和禁用 TLS 1.0 和 TLS 1.1 的情况下通过端口 25 发送电子邮件。
我们的邮件服务器是 Exchange Server 2010,我们的 SQL Server 2016(开发者和企业版)盒子有 Windows Server 2016 标准版的操作系统。
我们的 SQL Server 版本是:
select @@version
----------------------------------------
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64)
Dec 22 2017 11:25:00
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
Run Code Online (Sandbox Code Playgroud)
我们有如下所示的 DB 邮件配置。
问题是每当我们打开 SSL
use msdb
exec dbo.sysmail_update_account_sp @account_id=2, @enable_ssl = 1;
Run Code Online (Sandbox Code Playgroud)
我们不能发送 db …
我只是想知道这是否可行。我已经安装了 R 服务(数据库内)和 SQL Server 2016(在 SP1+ CU1 打补丁)。
我注意到 R 服务版本是 3.2.2,您可以运行以下脚本来检查
declare @v varchar(100);
exec sp_execute_external_script @language=N'R'
, @script = N'v <- toString(getRversion())'
, @params = N'@v varchar(100) output'
, @v = @v out;
print @v;
-- returns 3.2.2
Run Code Online (Sandbox Code Playgroud)
但我也安装了 Microsoft R 客户端,并注意到它的 R 服务引擎版本为:3. 3 .2。
所以我的问题是“不SQL Server R的服务(在数据库)现在支持研究第3版3 0.2?” 如果是这样,我该如何升级它?如果没有,我想我会等到 MS 发布更新。
我阅读了MSDN,并在其中提到使用sqlBindR.exe来进行更新,但是此工具仅适用于我没有安装的 Windows R 服务器,我什至怀疑如果我安装了它,它是否会更新数据库内R服务。
我的环境中安装了 100 多个 sql server 实例(从 sql 2005 到 sql 2016),有什么好方法可以找到最初安装实例的时间吗?
我试图检查 [master] 数据库的创建日期,发现(至少对于 sql 2012 以后)它总是 2003 年 4 月 8 日。
唯一可能的日期是 [msdb] 创建日期,我看到它因不同的 sql server 实例而变化。(我不确定这是因为我不确定服务补丁是否会更改 [msdb] 创建日期?)
有没有其他可靠的方法可以指示 sql server 实例创建日期?我愿意使用 t-sql 或 powershell 来解决这个问题。
提前致谢。
当用户要执行一个复杂的存储过程时,其中有相当多的表/视图甚至另一个存储过程。
我的问题是:
SQL server 在生成执行计划之前,会检查用户的权限吗?
否则,如果用户首先没有EXEC此存储过程的权限,则生成执行计划本身就是一种开销成本。
如果是,在我看来,SQL Server 引擎没有任何可消耗的东西,即没有安全标识符(如存储过程本身、存储过程中的表等),SQL Server 引擎可以使用它来检查用户权限. 至少在解析完成之前,不会生成所有这些安全标识符。
那么从执行存储过程的生命周期角度来看,SQL Server 权限检查何时开始?
我知道有一个类似的问题之前,在SO如图所示这里 然而,这个问题的答案真的没有解决我的问题。这是我的场景,我将使用 PowerShell 进行演示。
以下代码将在我的本地 sql2016 实例上创建两个会话
#The only difference in the two connection strings is [pooling] property, the $connstr_1 has pooling=true, while the $connstr_2 has pooling=false.
$connstr_1 = "data source=localhost\sql2016; initial catalog=master; trusted_connection=true; app=ConnPoolTest; pooling=true";
$SqlConnection1 = New-Object System.Data.SqlClient.SqlConnection($connstr_1)
$connstr_2 = "data source=localhost\sql2016; initial catalog=master; trusted_connection=true; app=ConnPoolTest; pooling=false";
$SqlConnection2 = New-Object System.Data.SqlClient.SqlConnection($connstr_2)
$SqlConnection1.Open()
$SqlConnection2.Open();
Run Code Online (Sandbox Code Playgroud)
我的问题是在 sql server 端,我怎么知道哪个会话的连接字符串将池属性设置为true和哪个设置为false?