标签: sql-server

如何在存储过程中使用 SP_EXECUTESQL 从查询中返回值

我有一个存储过程,它生成一个查询字符串,然后执行它

EXECUTE SP_EXECUTESQL @Query
Run Code Online (Sandbox Code Playgroud)

例如,查询是:Select Name, Age from tableA,非常简单。

但是如何从SP_EXECUTESQL(到变量中?)获取结果集,然后在我的存储过程中将其作为结果集返回?

sql-server stored-procedures t-sql

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

SSIS 执行的 SQL 代理作业失败,并显示“指定了无效的报告选项。仅允许 E、W、I、C、D、P、V 和 N。”

具有 SQL Server Integration Services 包步骤的 SQL 代理作业失败并显示以下消息:

以用户身份执行:DOMAIN\SQLAGENTACCOUNT。适用于 64 位的 Microsoft (R) SQL Server 执行包实用程序版本 13.0.4259.0 版权所有 (C) 2016 Microsoft。版权所有。指定的报告选项无效。仅允许 E、W、I、C、D、P、V 和 N。命令行参数无效。这一步失败了。

sql-server ssis sql-server-agent

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

“PRIMARY”文件组已满。如何增加 SQL Server Express 2017 中的 temdb 大小?

当我重新索引特定表时

\n\n
DBCC DBREINDEX(@TableName, \'\',90) \n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到一个错误

\n\n
\n

级别 17,状态 2,过程 aareindex,第 21 行 [批处理起始行 0]\n 无法为对象 \xe2\x80\x98dbo 分配空间。SORT 临时运行存储:\n 数据库 \xe2 中的 422738479742976\xe2\x80\x99 \x80\x98mydatabase\xe2\x80\x99 因为 \xe2\x80\x98PRIMARY\xe2\x80\x99\n 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。

\n
\n\n

所以我想尝试增加 TempDb 的大小

\n\n

我可以通过查看数据库属性使用 SSMS 查看大小,但我不知道如何设置它。

\n\n

[更新]

\n\n
select type_desc, name, size, max_size, growth from tempdb.sys.database_files\n
Run Code Online (Sandbox Code Playgroud)\n\n

回报

\n\n

这些结果

\n\n

文件大小已为 10236 Mb,Express 限制为 10 Gig\n但是磁盘使用情况报告显示 26% 的磁盘空间未分配,40% 为数据,32% 为索引。

\n

sql-server sql-server-express sql-server-2017

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

什么更好 - 设置 Always On 新数据和迁移数据,或使用现有服务器和数据并添加 Always On?

我有一个现有的 SQL Server 实例,其中包含三个数据库和少量数据。

我现在被要求创建一个 Always On 可用性组。现有服务器需要重新调整驱动器的大小,并且只有 3 个 vCPU。

所以,如果你有一个选择,什么是最简单/最安全的?启动新服务器,设置 Always On,然后从现有服务器迁移数据?

或者我应该保留现有的服务器和实例并将 Always On 可用性组添加到现有的 SQL Server 实例?

sql-server availability-groups sql-server-2016

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

了解何时从查询/计划中删除 Order By 或 Sort 运算符

当我正在阅读和理解时,如果匹配索引以支持查询的键列以相同的方式排序,则需要避免 SQL 查询中不需要的 ORDER BY。

对于下面的数据库测试模式——

CREATE PARTITION FUNCTION DemoPartitionFunction (datetime)
AS RANGE RIGHT
FOR VALUES (DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), -7),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), -6),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), -5),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), -4),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), -3),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), -2),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), -1),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), 0),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), 1),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), 2),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), 3),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), 4),
            DATEADD(dd, DATEDIFF(dd, 0, GETUTCDATE()), …
Run Code Online (Sandbox Code Playgroud)

performance index sql-server query-performance performance-tuning

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

增加 tempdb 文件大小是否需要重新启动

我想像这样改变 tempdb(我正在增加大小)

USE [master]
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'temp2', SIZE = 10240KB )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'temp3', SIZE = 10240KB )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'temp4', SIZE = 10240KB )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev', SIZE = 10240KB )
GO
Run Code Online (Sandbox Code Playgroud)

这是否需要我重新启动 SQL 服务器?

sql-server tempdb

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

如何将 CASE 表达式重写为短路评估

我想知道是否有任何方法可以重写查询中的表达式(只是表达式,而不是整个查询)以短路 THEN 阶段的无用评估?

演示数据:

CREATE TABLE #Docs (
    ID INT NOT NULL
    ,DocType TINYINT NOT NULL
    );

CREATE TABLE #DocsItems (
    IDDocs INT NOT NULL
    ,Amount NUMERIC(19,6)
    );

INSERT INTO #Docs(ID, DocType) VALUES(1,1),(2,1),(3,2),(4,2),(5,2),(6,2);
INSERT INTO #DocsItems(IDDocs,Amount) VALUES(3,50.),(3,25.),(3,33.),(4,44.),(4,123.),(6,11.);
Run Code Online (Sandbox Code Playgroud)

主题查询:

SELECT
    -- expression
    SumAmount = CASE 
                    WHEN D.DocType <> 1 THEN (SELECT SUM(Amount) FROM #DocsItems WHERE IDDocs = D.ID)
                END
FROM #Docs D
WHERE D.DocType = 1  -- so CASE condition evaluates to False
Run Code Online (Sandbox Code Playgroud)

查询计划: 在此处输入图片说明

如果我将查询(故意)重写为:

SELECT
    -- expression
    SumAmount = CASE …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan query-performance

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

SQL 数据库卡在恢复中

我有 SQL Server 2017。那里有一个 3 TB 大小的数据库。不知何故,由于长时间运行的事务,数据库在 SQL 服务器重新启动后陷入了“恢复”模式。当我检查 sql 错误日志时,它说剩余 2 189 255 秒(第 2 阶段,共 3 阶段)已完成,将近 25 天。我的目标是即使丢失了一些数据,也能使数据库联机。

所以我运行了下面的命令,但没有运气。

  USE [master]
  GO

  RESTORE DATABASE test WITH RECOVERY
  --Msg 3101, Level 16, State 1, Line 6
  --Exclusive access could not be obtained because the database is in use.
  --Msg 3013, Level 16, State 1, Line 6
   --RESTORE DATABASE is terminating abnormally.


  ALTER DATABASE test SET EMERGENCY;
  GO
  --Msg 5011, Level 14, State 7, Line 13
  --User does not …
Run Code Online (Sandbox Code Playgroud)

sql-server

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

如何在查询执行后检查其实际执行计划

在SQL Server中,我们如何在查询执行后查看其实际执行计划?

据我所知,只有估计的执行计划(而不是实际的执行计划)存储在计划缓存中。那是对的吗?

注意:我们没有任何第三方监控工具。

sql-server execution-plan

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

Azure VM (IaaS) 上托管的 SQL Server 是否支持数据库邮件?

Azure VM (IaaS) 上托管的 SQL Server 中是否存在数据库邮件?

如果不支持 DB 邮件,那么可以使用哪些功能?

sql-server azure-sql-database azure-vm azure

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