标签: sql-server

SQL Server 查询存储 - 什么是“临时”查询?

我一直在深入研究 SQL Server 查询存储,我经常看到对“临时”查询的引用。但是,我还没有看到查询存储确定临时查询是什么。我见过一些地方,它可以被推断为不带参数的查询或只执行一次的查询。是否存在对此的正式定义?我不是说一般。我的意思是因为它与查询存储有关。

例如,此页面显示了从查询存储中删除临时查询的示例,但它使用的条件似乎只是执行计数为 1。这似乎是临时查询的奇怪定义。顺便说一句,如果您转到该页面,请搜索“删除临时查询”。

sql-server query-store

10
推荐指数
1
解决办法
3702
查看次数

如何在 SQL Server Management Studio 中折叠架构?

我不确定这是否可能,但我希望它是 - 我目前正在运行 SSMS 并且有一个数据库,它的数据全部“存放”在 DBO 模式中。我收到了建议(并且完全同意),最佳实践是创建与我们的业务功能相匹配的其他模式,我将继续推进。

我想知道是否有任何方法 - 即使是通过安装某种加载项,让架构崩溃,以便我可以隐藏所有 DBO 和 RPT 对象,直到我扩展架构 - 很多就像表格和其他文件夹被折叠一样。

如果这个问题不是本网站的“主题”,我深表歉意 - 但我认为这是最有可能知道答案的地方。

在我下面的屏幕截图中 - 我正在寻找要折叠的红色轮廓的位,现在只有 2 行 DBO - 以及我目前请求创建的 RPT:

在此处输入图片说明

sql-server ssms

10
推荐指数
1
解决办法
2462
查看次数

每 15 分钟进行一次事务日志备份是否比每 6 小时进行一次日志备份消耗更多的磁盘空间?

在我们的环境中,网络存储空间不足。同时,我想确保我们每 15 分钟进行一次事务日志备份,而不是每 6 小时一次。我的问题是将日志备份间隔从 6 小时更改为每 15 分钟会消耗更多磁盘空间吗?

sql-server backup disk-space network transaction-log

10
推荐指数
2
解决办法
4155
查看次数

sys.objects 列 [Type] 奇怪的值 'ST'

我在 sys.objects 中看到 [Type] 列的奇怪(未记录)值。值为“ST”,如下图(注意,dbo.Record 是一个用户表)

有谁知道这个“ST”值是什么意思?(这是在 SQL Server 2014 开发版中)

在此处输入图片说明

sql-server datatypes metadata sql-server-2014

10
推荐指数
1
解决办法
608
查看次数

如何将包含负值和零值的列的行相乘?

我正在尝试获取按查询分组的特定列的所有行的产品。我发现的大多数例子都指向组合exp,sumlog

exp(sum(log([Column A])))
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是该列包含一些值的零,因此当零传递给log函数时我收到此错误:

发生无效的浮点运算。

我以为我可以通过使用case表达式来解决这个问题,但这并不像我认为的那样工作,因为它似乎评估了所有情况......

select 
  Name,
  Product = case 
    when min([Value]) = 0 then 0 
    when min([Value]) <> 0 then exp(sum(log(I))) -- trying to get the product of all rows in this column
  end
 from ids
 group by Name
Run Code Online (Sandbox Code Playgroud)

SqlFiddle

给定以下结果集:

Id  Name  Value
_________________________________
1   a     1
2   a     2
3   b     0
4   b     1
Run Code Online (Sandbox Code Playgroud)

我希望得到以下行:

Name  Product
_____________
a     2
b     0
Run Code Online (Sandbox Code Playgroud)

所以总而言之......你如何乘以可以包含负数或零值的列中的行?

sql-server case sql-server-2014

10
推荐指数
1
解决办法
6234
查看次数

如何垂直显示 MS SQL 结果?

这是我目前在执行查询时得到的sqlcmd

1> SELECT 1,2,3,4
2> GO

----------- ----------- ----------- -----------
          1           2           3           4

(1 rows affected)
Run Code Online (Sandbox Code Playgroud)

虽然在更长的结果的情况下,这种输出格式不是人类可读的,因为它被包装在终端中。

如何垂直显示结果(相当于\Ginmysql)?或者以另一种人类可读的方式?

sql-server sqlcmd

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

优化 2,135,044,521 行表上的索引

我有一张大表的 I/O 问题。

一般统计

该表具有以下主要特征:

  • 环境:Azure SQL 数据库(层为 P4 Premium (500 DTU))
  • 行数:2,135,044,521
  • 1,275 个已用分区
  • 聚集索引和分区索引

模型

这是表的实现:

CREATE TABLE [data].[DemoUnitData](
    [UnitID] [bigint] NOT NULL,
    [Timestamp] [datetime] NOT NULL,
    [Value1] [decimal](18, 2) NULL,
    [Value2] [decimal](18, 2) NULL,
    [Value3] [decimal](18, 2) NULL,
    CONSTRAINT [PK_DemoUnitData] PRIMARY KEY CLUSTERED 
    (
        [UnitID] ASC,
        [Timestamp] ASC
    )
)
GO

ALTER TABLE [data].[DemoUnitData] WITH NOCHECK ADD CONSTRAINT [FK_DemoUnitData_Unit] FOREIGN KEY([UnitID])
REFERENCES [model].[Unit] ([ID])
GO

ALTER TABLE [data].[DemoUnitData] CHECK CONSTRAINT [FK_DemoUnitData_Unit]
GO
Run Code Online (Sandbox Code Playgroud)

分区与此有关:

CREATE PARTITION SCHEME [DailyPartitionSchema] …
Run Code Online (Sandbox Code Playgroud)

performance sql-server index-tuning azure-sql-database query-performance

10
推荐指数
1
解决办法
276
查看次数

在源代码管理中包含 SQL Server 代理作业的最佳方法是什么?

我发现,如果我将 SQL Server 代理作业编写为脚本开头的“创建到”脚本use msdb- 所以我假设作业存储在 msdb 数据库中?

将 SQL Server 作业添加到 Visual Studio 数据库项目的最佳方法是什么?我将 msdb 数据库添加到数据库解决方案中,但这似乎没有对作业的任何引用。

我希望将作业与数据库一起部署/更新......这似乎不可能?

sql-server visual-studio sql-server-agent

10
推荐指数
1
解决办法
8211
查看次数

每个批次都会导致编译

我们有一个第三方应用程序,可以批量发送 T-SQL 语句。

该数据库托管在 SQL Server 2016 Enterprise SP1 CU7、16 核和 256GB 内存上。已启用 Ad-Hoc 优化。

这是正在执行的查询的虚拟示例:

exec sp_executesql N'
IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT

select field1, field2 from table1 where field1=@1
option(keep plan, keepfixed, loop join)

select field3, field4 from table2 where field3=@1
option(keep plan, keepfixed, loop join)', N'@1 nvarchar(6)',@1=N'test'
Run Code Online (Sandbox Code Playgroud)

当我监视数据库并查看批处理/秒和编译/秒时,我注意到它们总是相同的。在重负载下,这可以是 1000 批/秒和 1000 次编译/秒。在平均负载下,有 150 个批次/秒。

我分析了最近编译计划的查询缓存:

SELECT TOP (1000) qs.creation_time
    , DatabaseName = DB_NAME(st.dbid)
    , qs.execution_count
    , st.text
    , qs.plan_handle
    , qs.sql_handle
    , qs.query_hash …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2016 query-performance

10
推荐指数
2
解决办法
422
查看次数

返回属性不包含特定字符的 xml 序列

考虑以下简单的 XML:

<xml>
  <customer name="Max">
    <email address="me@you.com" />
  </customer>
  <customer name="Erik">
    <email address="erik@your-mom.com" />
  </customer>
  <customer name="Brent">
    <email address="brentcom" />
  </customer>
</xml>
Run Code Online (Sandbox Code Playgroud)

我想要得到的名单<Customer>,其中序列address中的属性<email>项并没有包含@

所以,我希望输出看起来像:

<customer name="Brent">
  <email address="brentcom" />
</customer>
Run Code Online (Sandbox Code Playgroud)

麦克维

DECLARE @x XML = '<xml>
<customer name="Max"><email address="me@you.com" /></customer>
<customer name="Erik"><email address="erik@your-mom.com" /></customer>
<customer name="Brent"><email address="brentcom" /></customer>
</xml>';
Run Code Online (Sandbox Code Playgroud)

这个查询:

SELECT WithValidEmail = @x.query('/xml/customer/email[contains(@address, "@")]')
    , WithInvalidEmail = @x.query('/xml/customer/email[contains(@address, "@")] = False');
Run Code Online (Sandbox Code Playgroud)

返回:

????????????????????????????????????????????????????????????
?            WithValidEmail             ? WithInvalidEmail ? …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xquery

10
推荐指数
1
解决办法
2706
查看次数