小编SF *_*Lee的帖子

如何查看运行SQL存储过程的进度?

考虑以下存储过程..

CREATE PROCEDURE SlowCleanUp (@MaxDate DATETIME)
AS
BEGIN
    PRINT 'Deleting old data Part 1/3...'
    DELETE FROM HugeTable1 where SaveDate < @MaxDate

    PRINT 'Deleting old data Part 2/3...'
    DELETE FROM HugeTable2 where SaveDate < @MaxDate

    PRINT 'Deleting old data Part 3/3...'
    DELETE FROM HugeTable3 where SaveDate < @MaxDate

    PRINT 'Deleting old data COMPLETED.'
END
Run Code Online (Sandbox Code Playgroud)

假设每个delete语句需要很长时间才能删除,但是我喜欢在SQL Management Studio中运行它时看到这个存储过程的进度.换句话说,我喜欢看PRINT语句的输出,看看我在任何给定时间的位置.但是,我似乎只能在ENTIRE运行结束时看到PRINT输出.有没有办法让它能够实时看到PRINT输出?如果没有,还有其他方法可以看到正在运行的存储过程的进度吗?

sql t-sql ssms

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

与NOWAIT的RAISERROR不那么直接?

我之前问过一个关于如何PRINT在脚本的其余部分仍在运行时立即提供输出的问题(请参阅:如何查看运行SQL存储过程的进度?).简单的答案是使用:

RAISERROR ('My message', 0, 1) WITH NOWAIT
Run Code Online (Sandbox Code Playgroud)

但是,我注意到返回的输出并不总是立即的,特别是当它返回大量结果时.作为一个简单的实验,请考虑以下脚本:

DECLARE @count INT
SET @count = 1

WHILE @count <= 5000
BEGIN
    RAISERROR ('Message %d', 0, 1, @count) WITH NOWAIT
    WAITFOR DELAY '00:00:00.01'
    SET @count = @count + 1
END
Run Code Online (Sandbox Code Playgroud)

上面的脚本将吐出5000行文本.如果您运行脚本,您会注意到:

  • 对于前500行(1 - 500行),它立即返回每个输出行.
  • 对于接下来的500行(501-1000行),它每50行返回一次输出.(所有50行将一起批处理,并且仅在每个第50行的末尾返回.)
  • 对于之后的每一行(1001 - *行),它每100行返回一次输出.(所有100行将一起批处理,仅在每100行末尾返回.)

所以这意味着在前500行之后,RAISERROR WITH NOWAIT不再按预期工作,并且给我带来问题,因为我想看看我长时间运行的脚本的进度.

所以我的问题:是否有任何方法可以禁用这种"批量"行为并使其始终立即返回?


编辑:我正在使用SSMS(SQL Server Management Studio)来运行上面的脚本.它似乎影响所有版本(SSMS和SQL Server),以及输出是否设置为"结果到文本"或"结果到网格"没有区别.

编辑:显然,这个批处理行为发生在500行后,无论字节数.所以,我已经相应地更新了上面的问题.

编辑:感谢Fredou指出这是SSMS的问题,而像LinqPad这样的第三方工具也不会有这个问题.

但是,我发现当你在输出中有表结果时,LinqPad不会立即输出.例如,请考虑以下代码:

RAISERROR ('You should see …
Run Code Online (Sandbox Code Playgroud)

sql t-sql

11
推荐指数
2
解决办法
5810
查看次数

VS2010安装项目 - 以管理员身份运行

我有一个VS2010解决方案,其中包含2个项目 - 一个.NET 4程序,以及一个安装程序.安装程序只是一个简单的安装项目,具有先决条件 - .NET Framework 4.

问题是我需要安装程序setup.exe始终以管理员身份运行,否则安装程序将在UAC下失败.(默认情况下,它不会提示我提升权限.)

我尝试将setup.exe.manifest(如下所示)与setup.exe一起强制以管理员身份运行,但不幸的是Windows忽略了它,很可能因为setup.exe本身已经嵌入了另一个清单文件而且它是设置为asInvoker而不是requireAdministrator.

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>
Run Code Online (Sandbox Code Playgroud)

我还尝试添加具有以下属性的启动条件: -

(name): Elevated
Condition: Privileged
Message: This installation requires elevated permissions to continue.
Run Code Online (Sandbox Code Playgroud)

这也没有做任何事情.

那么有人可以阐明如何解决这个问题吗?

PS我知道您可以通过更改setup.exe的兼容性设置来解决此问题,但这是一个手动过程,无法通过自动构建过程(TFS)完成.此外,提供兼容性设置的快捷方式也很奇怪,因为没有人提供同一文件夹中setup.exe的快捷方式,更不用说快捷方式需要事先知道setup.exe的确切路径.(安装包将被移动.)


编辑:顺便说一句,我的问题与这里描述的问题完全相同.但遗憾的是,没有找到该人的解决方案,而提问者只是要求他的客户手动使用"以管理员身份运行",这正是我想要避免的.

installation uac visual-studio-2010

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

SQL Management Studio'查看依赖项'未列出所有依赖项

在过去,我想当右键单击SSMS中的表并单击"查看依赖项"时,它会列出使用该表的所有表和存储过程.但最近我注意到它错过了一些依赖.

有时它会错过一些使用SELECT语句引用它的存储过程,有时它是INSERT或UPDATE语句.在什么是依赖和什么不依赖的情况下似乎没有共同的模式.任何人都可以对此有所了解吗?(不,这不是权限问题.我有sysadmin权限.)

我的最终目标是找到一种方法,使用最简单的方法(即很少或没有脚本)找到特定表/视图/存储过程的所有依赖项,但它必须返回所有依赖项,而不仅仅是一些依赖项.有帮助吗?

PS.我正在使用SQL Server 2005和SSMS 2005.

谢谢.

sql t-sql ssms

5
推荐指数
1
解决办法
4384
查看次数

用于解析CSV的正则表达式

我正在尝试编写一个可以从CSV文件中提取单个字段的正则表达式.

例如,如果在CSV文件中给出以下行:

123,    Bob    ,Bob, " Foo Bar ", "a, ""b"", c"
Run Code Online (Sandbox Code Playgroud)

应该给下面的结果(引号):

'123'
'Bob'
'Bob'
' Foo Bar '
'a, "b", c'
Run Code Online (Sandbox Code Playgroud)

请注意,除非它们在引号内,否则应修剪前导和尾随空格.

我并不担心无效的CSV行,例如没有匹配收盘价的开盘价.根据上述规则,您可以放心地假设CSV文件完全有效.

如果单个Regex有困难,我也可以使用多个正则表达式.但我喜欢避免使用标准的C#操作,除非它们简单而简短.(我不想最终编写大量代码.)

那么,有什么建议吗?

c# regex csv

0
推荐指数
1
解决办法
946
查看次数

标签 统计

sql ×3

t-sql ×3

ssms ×2

c# ×1

csv ×1

installation ×1

regex ×1

uac ×1

visual-studio-2010 ×1