我有一个带有 REAL 类型列的简单表。
表中有 2 行,值分别为 0.23 和 0.24。如果我运行以下命令:
SELECT AVG(MyColumn) FROM dbo.MyTable
Run Code Online (Sandbox Code Playgroud)
我希望得到 0.235 的结果,但实际上我得到 0.2349999901234。
有人可以告诉我为什么吗?
我正在尝试选择服务器中 15% 的可用磁盘空间。
SELECT DISTINCT
s.volume_mount_point [Drive],
CAST(s.available_bytes / 1048576.0 as decimal(20,2)) [AvailableMBs],
((CAST(s.total_bytes / 1048576.0 as decimal(20,2)))*15)/100 AS [FifteenpercentAvailableMBs]
FROM
sys.master_files f
CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.[file_id]) s
Run Code Online (Sandbox Code Playgroud)
此查询在 Microsoft SQL Server 2008 R2 (SP2) 中运行良好
但它不适用于 Microsoft SQL Server 2008 R2 (RTM)
我怎样才能使这个查询在 2008 R2 RTM 中工作?(我的意思是有没有其他查询可以用来获得 15% 的可用空间?)
我需要创建一个如下所示的表:
+----+---------+---------+
| Id | Product | Version |
+----+---------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 1 | 3 |
| 5 | 2 | 2 |
+----+---------+---------+
Run Code Online (Sandbox Code Playgroud)
哪里ID是Identity(1,1)我需要的Version是自动填充这取决于插入Product。
SELECT使用ROW_NUMBER()with可以达到类似的效果PARTITION:
SELECT ID, Product,
ROW_NUMBER() OVER(PARTITION BY Product ORDER BY ID) AS Version
FROM Products
Run Code Online (Sandbox Code Playgroud)
我有哪些选择?
我查询此 SQL 查询:
SELECT * FROM [DB].[dbo].[Table]
WHERE [DATE] BETWEEN '01-01-2016' AND '31-03-2016'
AND ([TIME] >= '00:00:00' OR [DATE] > '01-01-2016')
AND ([TIME] <= '00:00:00' OR [DATE] < '31-03-2016');
Run Code Online (Sandbox Code Playgroud)
但在 SQL Studio 中,结果为另一个日期和时间。
[DATE] = VARCHAR(10) (DD-MM-YYYY)
[TIME] = VARCHAR(10) (HH:MM:SS) 24h
Run Code Online (Sandbox Code Playgroud)
怎么修 ?
在 SQL Server 和基于实体框架的 PMS 应用程序中,我们有一个存储过帐数据的表(用于发票)。此表中的一列如下:
[PostingDate] [datetime] NOT NULL
Run Code Online (Sandbox Code Playgroud)
它没有触发器或约束或其他任何东西,除了一个非常简单地创建的索引,如下所示:
CREATE NONCLUSTERED INDEX PostingDateIndex
ON dbo.Posting(PostingDate)
Run Code Online (Sandbox Code Playgroud)
出于某种原因,针对该索引的随机查询变得缓慢,大约每月两次,而应用程序的服务器是 24/7 全天候在线(甚至不会重新启动)并且 - 作为 PMS - 日夜频繁使用。
DBCC CHECKTABLE('dbo.Posting')
Run Code Online (Sandbox Code Playgroud)
当查询变慢时不会发现任何错误。唯一的症状是严重依赖此 PostingDate 列过滤行的查询开始变得非常缓慢,它们通常会超出我们查询的 10 分钟超时时间(当索引正常时,它们需要不到 30 秒的时间来完成)。
dbo.Posting 表本身仍然有用,您可以插入和编辑行,也可以进行简单的选择,无论您想要什么,但是当您启动严重依赖 PostingDate 的查询时,它们只会无限运行。
数据库有十多个其他索引(其中一个位于同一张表的另一个 int 类型列上),但没有一个遇到此问题。此外,该问题在 SQL Server 2014 和 SQL Server 2016 中随机出现。
要修复它,我们要做的就是右键单击 Management Studio 中的索引并选择Rebuild。完成后,一切都会再次快速运行……但是,问题会随机出现,并且在生产环境中,某些查询在我们手动重建索引之前就会消失,这在生产环境中是不可接受的。
我完全不知道是什么导致了这个问题,以及为什么只有这个特定的索引受到影响。有人能指出我正确的方向吗?我什至如何找到导致它的原因?
是否可以在数据库中创建自定义架构,以便在该数据库中对 dbo 架构具有只读访问权限的用户可以设置为能够为自定义架构创建和修改实体?
我正在考虑在我的数据仓库中使用增量统计信息,但我读了Erin Stellato 的一篇文章,其中说查询优化器不使用增量统计信息。这篇文章写于 2015 年 5 月,但在接下来的 6 年里我没有看到任何人放弃她的立场。不同社区中有许多文章展示了如何设置它,但如果它没有用,为什么还要麻烦呢?有谁知道2016、2017、2019年的查询优化器后续版本是否支持使用增量统计?如果没有,我们是否应该使用它们?如果它们不能帮助引擎就如何查询包含 100 亿条记录的表做出正确的决定,那它有什么好处呢?感谢您的帮助!
报告当前计算“总计”列,如下所示:
,CASE WHEN ISNULL(CLM_BREAKFAST_TYPEA.MealsA, 0) +
ISNULL(CLM_BREAKFAST_TYPEB.MealsB, 0) = 0
THEN ''
ELSE CONVERT(VARCHAR(15),
ISNULL(CLM_BREAKFAST_TYPEA.MealsA, 0) +
ISNULL(CLM_BREAKFAST_TYPEB.MealsB, 0))
END AS 'MealsTotal'
Run Code Online (Sandbox Code Playgroud)
当总数等于零而不是 NULL 或“0”时,如何获得空白单元格,并避免进行两次计算?
如何在 IF“子句”中做多项事情?我真的可以只做一个动作吗?我在谷歌上搜索了“sql server scope”,但它返回了一堆关于“scope_identity”的无关内容,而没有关于语法......
例子:
DECLARE @db_level int = 2
DECLARE @db_major int = 1
DECLARE @db_minor int = 0
DECLARE @db_point int = 0
DECLARE @db_current_level int = (SELECT MAX(db_level) FROM db_schema_log_tb)
IF (@db_level > @db_current_level)
PRINT 'Script failed because database level is higher than script level';
GOTO ExitScript;
ELSE
SELECT * FROM custom_tb;
ExitScript:
Run Code Online (Sandbox Code Playgroud)
显然,这个脚本中的 ELSE 是不正确的语法,除非我删除了 PRINT 语句。
sql-server ×9
t-sql ×3
permissions ×2
date ×1
ddl ×1
dmv ×1
functions ×1
identity ×1
index ×1
null ×1
schema ×1
statistics ×1
time ×1