在我的数据库中,我有一些重新编译的存储过程
我找到它们的方式是:
SELECT OBJECT_NAME(ID)AS SP_NAME,*
FROM SYSCOMMENTS
WHERE TEXT LIKE '%WITH RECOMPILE%'
Run Code Online (Sandbox Code Playgroud)
当我看:
select * from sys.procedures
Run Code Online (Sandbox Code Playgroud)
我发现没有重新编译的迹象。
有没有更好或更优雅的方法来找到重新编译存储过程?
我有一个有 4 列的表qty,qtydiff,price和value。
我想要after update trigger在 qty 行值更改(多于一行)时触发。
该Before trigger应阅读,并从数量存储旧值和触发后应从新的价值上减去旧值qty列,在得到差值qtydiff繁衍与price列和更新的结果在value列。
下面的代码只是我还没有测试过的概念代码,我不确定它是否有效,但是有没有办法让更新前后在同一个触发器中工作?
CREATE TRIGGER [dbo].[Price_Modified]
ON [dbo].[STOCK]
BEFORE UPDATE ON STOCK
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (Qty)
BEGIN
SELECT qty
FROM STOCK
END
AFTER UPDATE
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (Qty)
BEGIN
UPDATE Stock
SET value = price * qtydiff
FROM STOCK
WHERE qtydiff = oldvalue - …Run Code Online (Sandbox Code Playgroud) 在 2 个 sql server 2016 服务器之间设置日志传送我希望我的数据库在辅助服务器上只读备用。
有一个勾选框说Disconnect users in the database when restoring backups。
如果我不勾选这个框怎么办?日志的恢复不会通过,因为它无法获得数据库的排他锁?
但是,如果有人登录数小时怎么办?几个小时没有恢复日志?
restore transaction-log log-shipping session sql-server-2016
换句话说,我怎样才能摆脱下图中的sort操作符?
SELECT TOP 1 so.OrgType,
ch.Status,
rcs.DBSstatusDescription,
cid.ApplicationId
FROM tbl_application_crb_initialData cid
INNER JOIN tbl_season_organisationId so
ON cid.OrganisationId = so.OrgId
LEFT JOIN tbl_crbHistory ch
ON cid.ClientReference = ch.ClientReference
LEFT JOIN ref_crbStatus rcs
ON ch.Status = rcs.statusId
ORDER BY cid.DateAdded DESC, ch.DateAdded DESC
SELECT TOP 1 so.OrgType,
ch.Status,
rcs.DBSstatusDescription,
cid.ApplicationId
FROM tbl_application_crb_initialData cid
INNER JOIN tbl_season_organisationId so
ON cid.OrganisationId = so.OrgId
LEFT JOIN tbl_crbHistory ch
ON cid.ClientReference = ch.ClientReference
LEFT JOIN ref_crbStatus rcs
ON ch.Status = rcs.statusId …Run Code Online (Sandbox Code Playgroud) performance sql-server optimization order-by sql-server-2016 query-performance
我找不到任何相关的东西listing the installed features in sql server 2016。
我可以手动查看日志 - 根据下面的信息,但我想自动化它。
安装 SQL Server 2016 后,我得到一个日志文件 - 位于以下文件夹中的某处:
C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\20200109_205540
名称以Summary_+开头的文件my_server_name
在该文件中,除其他外,我可以找到已安装的 Sql Server 功能列表:

安装后,稍后当系统已在使用时,应用登录和权限,修复防火墙等。
有没有一种简单的方法来获取安装在 sql server 实例上的功能列表?
运行以下查询时,我收到以下错误消息:
无法解决 equal to 操作中“Latin1_General_CI_AS”和“Latin1_General_BIN”之间的排序冲突
此查询工作正常,基本上为我提供了在当前数据库中创建用户的脚本。
为了在当前服务器中的所有(或选择)数据库中运行查询,我通过动态 SQL 和 XML PATH 完成了它。
问题是,当我取消注释下面脚本的 XML 部分时,出现上面的错误。
我不是在所有服务器中都收到此错误。有些服务器工作正常,有些则陷入困境。
我希望此查询可以在所有服务器中运行,而与服务器排序规则无关。
我怎样才能做到这一点?
DECLARE @sql NVARCHAR(MAX)
DECLARE @ParamDefinition NVARCHAR(MAX)
DECLARE @log NVARCHAR(MAX)
,@vCrlf CHAR(2);
SELECT @log = ''
,@vCrlf = CHAR(13)+CHAR(10);
SELECT @SQL = '
--==========================================
-- creating the users
--==========================================
select db = db_name(),
_login=[master].[sys].[server_principals].[name],
role_= null,
obj=null,
Permission= null,
[script]=
''CREATE USER [''
+ [sys].[database_principals].[name] + '']'' + '' FOR LOGIN ['' + [master].[sys].[server_principals].[name] + '']''
from [sys].[database_principals] INNER JOIN [master].[sys].[server_principals]
on [sys].[database_principals].[name]=[master].[sys].[server_principals].[name] …Run Code Online (Sandbox Code Playgroud) 我想删除与一组特定数据库相关的所有作业。
因此,我已将所有名称添加到表变量中,并尝试生成脚本以删除作业。
我怎样才能做到这一点?
use msdb
go
DECLARE @R TABLE ( NAME VARCHAR(108) NOT NULL PRIMARY KEY CLUSTERED)
INSERT INTO @R(NAME)
SELECT
'UK15SUMMProduct' UNION ALL SELECT
'US15SUMMProduct' UNION ALL SELECT
'DE15SUMMProduct' UNION ALL SELECT
'AT15SUMMProduct' UNION ALL SELECT
'FR15SUMMProduct' UNION ALL SELECT
'EU15SUMMProduct' UNION ALL SELECT
'AU15SUMMProduct' UNION ALL SELECT
'UK15SUMSProduct' UNION ALL SELECT
'US15SUMSProduct' UNION ALL SELECT
'DE15SUMSProduct' UNION ALL SELECT
'AT15SUMSProduct' UNION ALL SELECT
'FR15SUMSProduct' UNION ALL SELECT
'EU15SUMSProduct' UNION ALL SELECT
'AU15SUMSProduct'
SELECT S.*
FROM SYSJOBS S
WHERE …Run Code Online (Sandbox Code Playgroud) sql-server sql-server-2008-r2 select sql-server-2012 sql-server-2014
跟踪标志用于临时设置特定服务器特征或关闭特定行为
有关跟踪标志的更多信息在这里
DBCC TRACESTATUS
Run Code Online (Sandbox Code Playgroud)
以上是显示当前在我的系统上运行的所有跟踪标志的命令。
我有两个问题:
1) 除了DBCC TRACESTATUS?之外,还有其他方法可以找到当前正在运行的跟踪标志列表吗?
2) 可以在上图中看到跟踪标志 1222 处于活动状态,但发生死锁时我没有收到任何电子邮件。还需要做什么?
我有一个程序可以显示丢失的索引。
它对我来说非常好,但它没有向我显示丢失的FILTERED INDEXES。
我希望我的程序能够捕获和建议过滤索引以及表索引,这可能吗?
这是我目前的程序:
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
BEGIN TRY
PRINT @@SERVERNAME
PRINT DB_NAME()
PRINT 'PROCEDURE sp_GetMissingIndexes'
DROP PROCEDURE sp_GetMissingIndexes
print 'dropped PROCEDURE sp_GetMissingIndexes'
END TRY
BEGIN CATCH
END CATCH
GO
CREATE PROCEDURE sp_GetMissingIndexes
@dbname SYSNAME = NULL
,@TableName SYSNAME = NULL
WITH ENCRYPTION
AS
/*
=======================================================================
Script : sp_GetMissingIndexes
Author : Marcelo Miorelli
Date : 15-dec-2014
Desc : get the list of missing indexes, database and table can be …Run Code Online (Sandbox Code Playgroud) 我有很多过程在创建它们时使用了WITH ENCRYPTION选项。
您可以在下面的图片中看到这一点,例如:
问题是当我想保存我以前版本的存储过程时,我无法得到预期的结果,如下图所示。
我备份存储过程代码的方式在下面的链接上: 如何备份存储过程的当前代码及其权限?
select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name
, 'Type' = per.state_desc, 'Permission' = per.permission_name
, 'Login' = pri.name, 'Type' = pri.type_desc
, *
From sys.procedures as p
left join sys.database_permissions as per on p.object_id = per.major_id
left join sys.database_principals as pri on per.grantee_principal_id = pri.principal_id
where ...
Run Code Online (Sandbox Code Playgroud)
有没有办法在保存之前从存储过程的代码中删除 WITH ENCRYPTION?
前提是我拥有该程序的所有权。
下面的链接上有一个几乎重复的问题 How to view an encrypted view or stored procedure
但是,在这个问题上,我拥有数据库。我是系统管理员。我可以使用任何资源,但我想要通过 T-SQL 的解决方案。
sql-server ×9
automation ×2
dmv ×2
c# ×1
collation ×1
dbcc ×1
deadlock ×1
dynamic-sql ×1
installation ×1
log-shipping ×1
logs ×1
metadata ×1
optimization ×1
order-by ×1
performance ×1
permissions ×1
restore ×1
scripting ×1
select ×1
session ×1
t-sql ×1
trigger ×1
xml ×1