小编Mar*_*lli的帖子

如何使用重新编译查找存储过程?

在我的数据库中,我有一些重新编译的存储过程

我找到它们的方式是:

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)

我发现没有重新编译的迹象。

有没有更好或更优雅的方法来找到重新编译存储过程?

sql-server stored-procedures metadata dmv sql-server-2016

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

同一表上的更新前后触发器

我有一个有 4 列的表qtyqtydiffpricevalue

我想要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)

trigger sql-server c#

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

恢复备份时不在数据库中设置断开用户的惩罚是什么?

在 2 个 sql server 2016 服务器之间设置日志传送我希望我的数据库在辅助服务器上只读备用。

有一个勾选框说Disconnect users in the database when restoring backups

如果我不勾选这个框怎么办?日志的恢复不会通过,因为它无法获得数据库的排他锁?

但是,如果有人登录数小时怎么办?几个小时没有恢复日志?

在此处输入图片说明

restore transaction-log log-shipping session sql-server-2016

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

添加一个额外的“order by”列给了我一个更糟糕的计划

换句话说,我怎样才能摆脱下图中的sort操作符?

在此处输入图片说明

上图显示了以下2个select的执行计划

                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

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

如何列出安装在 sql server 实例中的所有功能?

还有其他与安装相关的问题,这里这里有类似的细节。

我找不到任何相关的东西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 实例上的功能列表?

sql-server logs installation sql-server-2016 automation

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

运行动态 sql FOR XML PATH 时的排序规则冲突

运行以下查询时,我收到以下错误消息:

无法解决 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)

xml sql-server collation permissions dynamic-sql

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

WHERE NAME LIKE (一组名字)

我想删除与一组特定数据库相关的所有作业。

因此,我已将所有名称添加到表变量中,并尝试生成脚本以删除作业。

我怎样才能做到这一点?

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

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

跟踪标志正在运行,但在发生死锁时没有消息

跟踪标志用于临时设置特定服务器特征或关闭特定行为

有关跟踪标志的更多信息在这里

DBCC TRACESTATUS
Run Code Online (Sandbox Code Playgroud)

以上是显示当前在我的系统上运行的所有跟踪标志的命令。

在此处输入图片说明

我有两个问题:

1) 除了DBCC TRACESTATUS?之外,还有其他方法可以找到当前正在运行的跟踪标志列表吗?

2) 可以在上图中看到跟踪标志 1222 处于活动状态,但发生死锁时我没有收到任何电子邮件。还需要做什么?

sql-server deadlock dbcc scripting automation

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

如何获取作为“过滤索引”的缺失索引

我有一个程序可以显示丢失的索引。

它对我来说非常好,但它没有向我显示丢失的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)

sql-server dmv filtered-index sql-server-2014

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

如何从过程代码中删除 WITH ENCRYPTION - 通过 T-SQL

我有很多过程在创建它们时使用了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 stored-procedures t-sql sql-server-2014

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