Я написал несколько C# для выполнения указанных SQL-скриптов, отдельных команд в разделителе партий GO и выполнения каждой команды. Это значит, что объекты SQL могут быть установлены в начале приложения. Однако у меня возникла проблема с установкой и функциями CLR.Установка объектов SQL в C# - проблема при установке скриптов сборки и функций CLR
Он будет работать до конца и создать CLR сборки ОК, но когда он затем попытался создать функцию она возвращается сообщение об ошибке:
Incorrect syntax near the keyword 'FUNCTION'. Incorrect syntax near the keyword 'AS'.
Я попытался создать сборку и функцию с помощью сценария непосредственно в SSMS и работает нормально. Я также запускаю скрипт функции на своем C# после создания сборки в SSMS, и это работает нормально. Кажется, он просто не создает функцию, если оба сценария запускаются через C#.
C# код для выполнения сценария SQL:
var fileInfo = new FileInfo(sqlDirectory + "\\" + fileName);
var script = fileInfo.OpenText().ReadToEnd();
if (!String.IsNullOrEmpty(script))
{
string sqlBatch = string.Empty;
script += "\nGO";
try
{
foreach (
string line in
script.Split(new string[2] {"\n", "\r"},
StringSplitOptions.RemoveEmptyEntries))
{
if (line.ToUpperInvariant().Trim() == "GO")
{
if (sqlBatch != "")
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlBatch;
cmd.ExecuteNonQuery();
sqlBatch = string.Empty;
}
}
else
{
sqlBatch += line + "\n";
}
}
fileInfo.OpenText().Close();
}
catch (Exception err)
{
var context = HttpContext.Current;
Global.InstallError = "File Name: " + fileName + "<br/>" +
"Error: " + err.Message;
}
}
CLR Функция:
/****** Object: UserDefinedFunction [dbo].[fn_JSON_FormatArray] Script Date: 03/07/2013 11:52:18 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[fn_JSON_FormatArray](@value [xml], @label [nvarchar](4000))
RETURNS [xml] WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [CLRExtensions].[UserDefinedFunctions].[fn_JSON_FormatArray]
GO
EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFile', @value=N'JSON\fn_JSON_FormatArray.cs' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'FUNCTION',@level1name=N'fn_JSON_FormatArray'
GO
EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFileLine', @value=N'11' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'FUNCTION',@level1name=N'fn_JSON_FormatArray'
GO