forked from FilipDeVos/sp_select
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDeploy.Targets
83 lines (70 loc) · 3.21 KB
/
Deploy.Targets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTarget="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<server>(localdb)\MSSQLLocalDB</server>
<database>master</database>
<commandtimeout>120</commandtimeout>
</PropertyGroup>
<UsingTask TaskName="SqlExecuteFile"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<SqlFilePath ParameterType="System.String" Required="true" />
<ConnectionString ParameterType="System.String" Required="true" />
<ScriptOutput ParameterType="System.String" Output="true" />
<CommandTimeout ParameterType="System.Int32" Required="false"/>
</ParameterGroup>
<Task>
<Reference Include="System.Data" />
<Using Namespace="System.IO"/>
<Using Namespace="System.Text"/>
<Using Namespace="System.Linq"/>
<Using Namespace="System.Data.SqlClient"/>
<Code Type="Fragment" Language="cs">
<![CDATA[
var output = new StringBuilder();
var content = File.ReadAllLines(SqlFilePath);
var sqlBuffer = new StringBuilder();
SqlInfoMessageEventHandler messageHandler = (obj, e) => output.AppendLine(e.Message);
for (var i = 0; i < content.Count(); i++)
{
var line = content[i];
if (0 == string.Compare(line.Trim(), "GO", StringComparison.InvariantCultureIgnoreCase) || i+1 == content.Count())
{
using (var conn = new SqlConnection(ConnectionString))
using (var cmd = new SqlCommand(i == 0 ? line : sqlBuffer.ToString(), conn))
{
cmd.CommandTimeout = null == CommandTimeout || CommandTimeout == 0 ? 0 : (int)CommandTimeout;
conn.InfoMessage += messageHandler;
conn.Open();
cmd.ExecuteNonQuery();
conn.InfoMessage -= messageHandler;
}
sqlBuffer.Clear();
} else {
sqlBuffer.AppendLine(line);
}
}
ScriptOutput = output.ToString();
]]>
</Code>
</Task>
</UsingTask>
<ItemGroup>
<Procedures Include="$(SolutionDir)sp_*.sql" />
</ItemGroup>
<Target Name="Build" Outputs="%(Procedures.Identity)">
<PropertyGroup>
<ProcedureFile>%(Procedures.Identity)</ProcedureFile>
<ConnectionString Condition="'$(ConnectionString)'=='' AND '$(user)'!=''">Server=$(server);Database=$(database);User Id=$(user);Password=$(password);</ConnectionString>
<ConnectionString Condition="'$(ConnectionString)'=='' AND '$(user)'==''">Server=$(server);Database=$(database);Trusted_Connection=True;</ConnectionString>
</PropertyGroup>
<SqlExecuteFile
SqlFilePath="$(ProcedureFile)"
ConnectionString="$(ConnectionString)"
CommandTimeout="$(commandtimeout)">
<Output PropertyName="ScriptOutput" TaskParameter="ScriptOutput" />
</SqlExecuteFile>
<Message Importance="High" Text="$(ScriptOutput)"/>
</Target>
</Project>