如何在没有单元测试的情况下报告存储过程

How to report on stored procedures without unit tests

我们的 SQL 项目有大量存储过程,它们都应该伴随单元测试。

我正在尝试编写一些 Powershell 来报告未伴随单元测试的存储过程。

查找存储过程列表很简单 - 检查它们是否有测试,不是那么简单。该代码似乎存储在资源文件中。

这是我目前拥有的:

$sps = ((gci -recurse -include *.sql | select-string "CREATE PROCEDURE") -split ':' | select-string "CREATE PROCEDURE" | ForEach-Object {$_ -Replace "CREATE PROCEDURE ", ""}) -split " " | select-string "\."

foreach ($sp in $sps)
{

Write-Host  $sp

#ToDo: For each stored procedure, report on a count of EXEC statements calling this procedure in .resx files

}

有什么建议吗?

费尽周折(我的 Powershell-fu 糟透了),我想到了这个:

# Only include stored procedures that are in the project files
$prjs = (gci -recurse -include *.sqlproj) | select fullname | select-string ":"

foreach ($prj in $prjs)
{
    $file = ($prj -Replace "@{FullName=","") -Replace "}",""        
    $xml = [xml](Get-Content $file)
    $used = (((($xml.Project.ItemGroup.Build) | select Include) -split "\") | select-string ".sql") -replace "}",""    
}

# Pull a list of SPs from the project code
$sps = ((gci -recurse -include $used | select-string "CREATE PROC") -split ':' | select-string "CREATE PROC" | ForEach-Object {$_ -Replace "CREATE PROCEDURE ", ""} | ForEach-Object {$_ -Replace "CREATE PROC ", ""}) -split " " | select-string "\."


$fails = 0
$passes = 0

foreach ($sp in $sps)
{   
    # Handle disparity in presentation between [schema].[SpName] between SP and test code    
    $sp2 = ($sp -Replace "\[", "") -Replace "\]", ""    

    # Count each SP name presentation in test code
    $valium1 = (gci -recurse -include *.resx | select-string -SimpleMatch $sp).count
    $valium2 = (gci -recurse -include *.resx | select-string -SimpleMatch $sp2).count

    # If we don't have a match for either presentation, then no test exists
    if ($valium1 -eq 0 -AND $valium2 -eq 0)
    {
        $fails++;
        Write-Host "***FAIL***" $sp
    }
    else
    {
        $passes++;
        Write-Host "***PASS***" $sp  
    }
}

$total = [int]$fails + [int]$passes

Write-Host
Write-Host "Passes: " $passes
Write-Host "Fails : " $fails
Write-Host "------------"
Write-Host "Total : " $total
Write-Host "------------"