标签: sql-server-2014

SQL Server 如何知道何时隐式转换值

按照我之前的问题:隐式转换不会影响性能

我使用了下面的简单查询

select count(*)
from fpc
where SKey in ('201701', '201702A')
Run Code Online (Sandbox Code Playgroud)

SKey 是 int 类型,我在它上面有非聚集列存储索引。

显然我无法运行它,因为第二个值不是数字。所以我按 Ctrl+L 来查看估计的执行计划,我在Predicate属性中看到了一个有趣的事情:

[mydb].[dbo].[fpc].[SKey]=CONVERT_IMPLICIT(int,'201702A',0) OR
[mydb].[dbo].[fpc].[SKey]=(201701)
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么 SQL 使用“201701”作为数字,但对第二个值使用隐式转换:“201702A”

我感兴趣的是 SQL 服务器如何查看这两个值的内部机制。它知道第一个是数字而第二个不是吗?

sql-server type-conversion sql-server-2014

3
推荐指数
1
解决办法
261
查看次数

WHERE 1 = 2 返回一行

任何想法,为什么以下查询中的第一个返回带有 -1,NULL 的行,尽管它有一个WHERE 1=2

只有当我将查询放入另一个子查询时,它才能正常工作(并返回一个空的结果集)。

在 Microsoft SQL Server 2014 和 2016 上测试

DECLARE @i INT = 1

SELECT @i i, MAX(sub.id) mid
  FROM (SELECT TOP(@i) x.id
          FROM (VALUES(1), (2), (3), (4)) x(id)
         WHERE x.id > 2 + @i
         ORDER BY x.id) sub
WHERE 1 = 2

SELECT s1.i, s1.mid
  FROM (
        SELECT @i i, MAX(sub.id) mid
          FROM (SELECT TOP(@i) x.id
                  FROM (VALUES(1), (2), (3), (4)) x(id)
                 WHERE x.id > 2 + @i
                 ORDER BY x.id) sub
       ) …
Run Code Online (Sandbox Code Playgroud)

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

3
推荐指数
1
解决办法
184
查看次数

浮动到 varchar 没有尾随零

我有一段时间试图将FLOAT(53)字段转换VARCHAR为没有尾随零或科学记数法的字段。

该字段可能有一个非常大或非常小的数字。我需要将其转换为 VARCHAR 并最多显示小数点后 5 位但没有尾随零。所以 123.456789 应该是 123.45678,123456.78 应该是 123456.78。

我有一个 SQL Fiddle 显示我尝试过的内容:http ://sqlfiddle.com/#!6/bd392/4

sql-server varchar cast sql-server-2014

3
推荐指数
1
解决办法
5453
查看次数

数据库版本高于 SSMS 并在尝试创建表时抛出错误

我已经安装了 VS 2017。之后我安装了 SQL Server 2014。

每当我使用 SSMS 创建数据库并尝试创建表时,它都会返回以下错误:

不支持此后端版本来设计数据库图表或表格。(MS 可视化数据库工具)。

使用 SSMS 创建数据库时,兼容性级别没有可供选择的值。

SQL Server 的版本是 2017,SSMS 的版本是 2014。我该如何解决?

有什么方法可以将 SQL Server 2017 与 SSMS 2014 一起使用?

sql-server sql-server-2014 visual-studio-2017

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

数据库文件 ..._log 的最大文件大小设置为 x MB。如果空间不足,数据库将停止工作

我正在使用BrentOzarSQL Server First Responder Kit,因为我属于“管理 Microsoft SQL Server 的开发人员。如果它们出现故障或缓慢是您的错”。

运行的警告之一sp_blitz如下:

[DB] 数据库文件 DB_log 的最大文件大小设置为 10240MB。如果空间不足,即使可能有可用的驱动器空间,数据库也会停止工作。

日志文件位于与操作系统不同的驱动器上,我确实限制了它们的增长。所有数据库都有简单的恢复模式(大部分数据是通过复制和ETL自动获取的,从上次备份中恢复对我来说就足够了)。

该数据库有大约 20GB 的数据。

问题:如果恢复模式不强制我备份日志,数据库如何停止工作?

sql-server transaction-log sql-server-2014 sp-blitz

3
推荐指数
1
解决办法
384
查看次数

可以将 SQL Server 配置为不以静默方式截断 VARCHAR 值吗?

在像某些情况下这一个,SQL Server将默默地截断(N)VARCHAR值,导致严重的数据丢失时,错误地声明变量。

问题:可以将 SQL Server 配置为不以静默方式截断 VARCHAR 值吗?(并发出错误/引发异常)

sql-server sql-server-2014

3
推荐指数
1
解决办法
4994
查看次数

将整数数组作为(内联)用户定义函数 (SQL Server) 的参数传递

我有 TBV 功能。像这样

ALTER FUNCTION [dbo].[fn_Functiont]
(
 @accessibleIds   ListAccesableIds READONLY
)
RETURNS TABLE 
AS
RETURN 
(   
SELECT d.*, b.Name AS Name, ps.Name AS PaymentSystemName, c.UserName AS UserName, c.FirstName AS ClientFirstName, c.LastName AS LastName, c.Number AS DocumentNumber, c.Id
FROM Document AS d
JOIN System AS ps ON d.SystemId = ps.Id
JOIN Client AS c ON c.Id = d.ClientId
LEFT JOIN Shop AS b ON b.Id = d.ShopId
WHERE d.OperationTypeId IN (2, 4, 5) AND c.Type = 1
)
Run Code Online (Sandbox Code Playgroud)

我想传递给这个包含整数的函数列表。我想创建表值类型,但这里的问题是我如何将 List 输入参数传递给函数?我知道我可以通过 …

sql-server entity-framework functions sql-server-2014 table-valued-parameters

3
推荐指数
1
解决办法
5620
查看次数

触发器执行的最后时间

SQL SERVER 2014 - 有没有办法知道上次执行触发器的时间?

trigger sql-server sql-server-2014

3
推荐指数
1
解决办法
6471
查看次数

默认架构允许在不使用架构前缀的情况下选择 dbo 表

我在我的服务器上创建了一个登录名和一个数据库用户,如下所示:

USE master
GO
CREATE LOGIN MyLogin WITH PASSWORD=N'Password123!'
GO
USE AdventureWorks2014
GO
CREATE USER MyLogin FOR LOGIN MyLogin
GO
ALTER USER MyLogin WITH DEFAULT_SCHEMA=HumanResources
GO
GRANT SELECT ON SCHEMA :: Production TO MyLogin
GO
GRANT SELECT ON SCHEMA :: HumanResources TO MyLogin
GO
GRANT SELECT ON SCHEMA :: dbo TO MyLogin
Run Code Online (Sandbox Code Playgroud)

当我作为 MyLogin 登录时,我现在可以在 HumanResources 模式中选择对象而不使用四部分名称(因为 HumanResources 是该用户的默认模式)

SELECT * FROM HumanResources.Department
Run Code Online (Sandbox Code Playgroud)

现在可以在没有架构名称的情况下运行:

SELECT * FROM Department
Run Code Online (Sandbox Code Playgroud)

这可以。如果我然后尝试从生产模式中的表中选择而不使用模式前缀:

SELECT * FROM ProductDescription
Run Code Online (Sandbox Code Playgroud)

我按预期收到错误。这可以通过使用以下方法解决:

SELECT * FROM Production.ProductDescription
Run Code Online (Sandbox Code Playgroud)

因此,基于此,我需要在从默认架构之外的任何表中进行选择时指定架构名称。

那么为什么当我从 …

schema sql-server permissions sql-server-2014

3
推荐指数
1
解决办法
3068
查看次数

是什么导致数据库 [.mdf 文件] 突然增长

我试图找到导致数据库的 mdf 从 20 GB 膨胀到 100 GB 的原因。

到目前为止,我尝试检查自动增长事件以找到时间,但使用标准报告甚至默认跟踪文件都找不到。

我们没有 3rd 方监控工具来确认是否有任何维护工作(如重建)或任何其他过程。

我怎样才能找到导致这个 mdf 增长的原因?

sql-server auto-growth sql-server-2014

3
推荐指数
1
解决办法
2544
查看次数