Transact SQL рд╕реЗ IronPython рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

Transact SQL рдПрдХ рдмреЗрд╣рддрд░реАрди рднрд╛рд╖рд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдХреНрд╕рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдФрд░ / рдпрд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЗрд╕рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рд╣реЛрддреА рд╣реИрдВред рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╣рдбрд╝рддрд╛рд▓реА рдЙрджрд╛рд╣рд░рдг рдЙрдиреНрдирдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдмрд╕ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдФрд░ рдореБрдбрд╝ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред SQL рд╕рд░реНрд╡рд░ 2005 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ CLR рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐ / рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдмрд╣рд╛рд▓реА рдФрд░ рддреИрдирд╛рддреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдореИрдВ рдкреНрд░рдмрдВрдзрди рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдордХреНрдЦреА рдкрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреА-рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред .Net рдлреНрд░реЗрдорд╡рд░реНрдХ 4 рдореЗрдВ DLR (рдбрд╛рдпрдиреЗрдорд┐рдХ рднрд╛рд╖рд╛ рд░рдирдЯрд╛рдЗрдо) рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдЕрд╡рд╕рд░ рд╣реИред рд▓реЗрдЦрдХ рдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдЖрдпрд░рдирдкрд┐рдпрди рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред
рдХрджрдо рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрджрдо рдХрджрдо рдХреЗ рддрд╣рддред


рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП


рдореИрдВ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдлрдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
select [dbo].[pyExecute]( ' import re re.findall("\d+","   2013 !")[0] ' ) 

рдЕрдЬрдЧрд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдордЧреНрд░ рдХрд╛рд░реНрдп рдФрд░ рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?


рдЗрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо SQL Server 2008 R2, Visual Studio 2010 рдФрд░ IronPython 2.6.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдпрд░рдирдкрд╛рдЗрдерди рдХреЛ рдХреЛрдб рдХреА рд╕рд┐рд░реНрдл рдПрдХ рдкрдВрдХреНрддрд┐ (рдЙрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ) рдХреЛ рд╕рд╣реА рдХрд░рдХреЗ рд╕реНрд░реЛрдд рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рд░реНрд╡рд░ рд╕реЗрдЯрдЕрдк


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЖрдзрд╛рд░ рдмрдирд╛рдПрдВред рдЖрдЧреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВ CLR рдирд╛рдордХ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
 --         ALTER DATABASE CLR SET TRUSTWORTHY ON GO sp_configure 'show advanced options', 1; GO RECONFIGURE; GO --     sp_configure 'clr enabled', 1; GO RECONFIGURE; GO 


рд╕реНрд░реЛрдд рд╕реЗ IronPython рдХрд╛ рдирд┐рд░реНрдорд╛рдг


Sql рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдЬрдЧрд░ рдЗрдВрдЬрди рдХреЗ рдЖрд░рдореНрдн рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╣реА рдХрд░рдХреЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, IronPython 2.6.2 рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреЛрд▓реЗрдВред рд╣рдореЗрдВ IronPython рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Modules \ sys.cs рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ рдФрд░ GetPrefix рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣рдо рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреЗ рддрд╣рдд рдирд┐рд░реНрдорд┐рдд рдХреЛрдб рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, GetPrefix рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рдПрдЧрд╛ред
 private static string GetPrefix() { string prefix; #if SILVERLIGHT prefix = String.Empty; #else // prefix      prefix = String.Empty; /* try { prefix = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); } catch (SecurityException) { prefix = String.Empty; } */ #endif return prefix; } 

рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред IronPython.dll, IronPython.Modules.dll, Microsoft.Dynamic.dll, Microsoft.Scripting.dll, Microsoft.Scripting.Core.dll, Microsoft.Scripting.Debugging.dll, Microsoft.Scripting.ExtensionAttribute.dllред ред рдореИрдВ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рднреА рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╣рдорд╛рд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдЕрдм рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдкрд╣рд▓рд╛ pyCore рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдЖрдпрд░рдирдкрд┐рдереЙрди рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ pySQL рдкреНрд░реЛрдЬреЗрдХреНрдЯ CLR рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ pyCore рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред

pyCore

рд▓рдХреНрд╖реНрдп рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде, .net 3.5 рдЪреБрдиреЗрдВред рд╣рдо IronPython.dll, IronPython.Modules.dll, Microsoft.Scripting.dll, Microsoft.Scripting.Core.dll рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рд▓рд┐рдВрдХ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рд╣рдореЗрдВ рд╕реНрд░реЛрдд рд╕реЗ рдЖрдпрд░рдирдкрд┐рдереЙрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдпреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд┐рд▓реЗ рд╣реИрдВред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд┐рд░ pyCore рд╡рд░реНрдЧ рд╣реЛрдЧрд╛, рдЬреЛ рдЖрдпрд░рдирдкрд╛рдЗрдерди рдЗрдВрдЬрди рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬреЛ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
PyCore рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб
 using System; using Microsoft.Scripting.Hosting; using IronPython.Hosting; namespace pyCore { /// <summary> ///      ,  . /// </summary> public static class pyCore { static ScriptEngine engine; static ScriptRuntime runtime; /// <summary> ///  ,         /// </summary> static pyCore() { engine = Python.CreateEngine(); runtime = engine.Runtime; } /// <summary> ///    /// </summary> /// <param name="scope"> </param> /// <param name="name">     </param> /// <param name="value"> </param> public static void py_setvar (ScriptScope scope,string name, object value) { scope.SetVariable(name,value); } /// <summary> ///   . /// </summary> /// <param name="cmd"> </param> /// <param name="scope"> .  null    .</param> /// <param name="args">    .     args</param> /// <returns></returns> public static object py_exec(string cmd, ScriptScope scope = null, params object [] args) { //     -   var CurrentScope = (scope ?? runtime.CreateScope()); //   ,     if (args != null) { CurrentScope.SetVariable("args",args); } //     var source = engine.CreateScriptSourceFromString(cmd, Microsoft.Scripting.SourceCodeKind.AutoDetect); //     return source.Execute(CurrentScope); } /// <summary> ///     /// </summary> /// <returns></returns> public static ScriptScope CreateScope() { return engine.CreateScope(); } } } 


рдкреНрд░рд╛рдердорд┐рдХ рд░реБрдЪрд┐ рдореЗрдВ py_exec рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рда, рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдЖрдкрдХреЛ CLR рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ pyCore рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
 CREATE ASSEMBLY PYCORE FROM N'<   тАж>\pyCore.dll' WITH PERMISSION_SET = UNSAFE 

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдирд┐рдореНрди рдлрд╝реЙрд░реНрдо рдХреА рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА:
рдЕрд╕реЗрдВрдмрд▓реА 'pyCore' рд╕рдВрджрд░реНрдн рдЕрд╕реЗрдВрдмрд▓реА 'system.runtime.remoting, рд╕рдВрд╕реНрдХрд░рдг = 2.0.0.0, рд╕рдВрд╕реНрдХреГрддрд┐ = рддрдЯрд╕реНрде, publickeytoken = b77a5c561934e089ред', рдЬреЛ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрд╛рдо рдХреЗ рд▓рд┐рдП pyCore рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред рдкрд╛рдардХ рдХреЛ рдмреЛрд░ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреВрдВрдЧрд╛ рдЬреЛ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗред FROM рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдкреВрд░рд╛ рд░рд╛рд╕реНрддрд╛ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд┐рд▓реНрдб рд╕реНрд░реЛрдд рд╕реЗ рдЖрдпрд░рдирдкрд┐рдереЙрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдЖрддреЗ рд╣реИрдВред System.Runtime.Remoting.dll рдХреА рдЕрд╕реЗрдВрдмрд▓реА C: \ Windows \ Microsoft.NET \ рдлреНрд░реЗрдорд╡рд░реНрдХ \ v2.0.50527 \ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ
 CREATE ASSEMBLY ExtensionAttribute FROM N'<   тАж>\Microsoft.Scripting.ExtensionAttribute.dll' WITH PERMISSION_SET = UNSAFE CREATE ASSEMBLY ScriptingCore FROM N'<   тАж>\Microsoft.Scripting.Core.dll' WITH PERMISSION_SET = UNSAFE CREATE ASSEMBLY Scripting FROM N'<   тАж>\Microsoft.Scripting.dll' WITH PERMISSION_SET = UNSAFE CREATE ASSEMBLY SystemRuntimeRemoting FROM N'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Runtime.Remoting.dll' WITH PERMISSION_SET = UNSAFE CREATE ASSEMBLY MicrosoftDynamic FROM N'<   тАж>\Microsoft.Dynamic.dll' WITH PERMISSION_SET = UNSAFE CREATE ASSEMBLY ScriptingDebugging FROM N'<   тАж>\Microsoft.Scripting.Debugging.dll' WITH PERMISSION_SET = UNSAFE CREATE ASSEMBLY IronPythonModules FROM N'<   тАж>\IronPython.Modules.dll' WITH PERMISSION_SET = UNSAFE CREATE ASSEMBLY PYCORE FROM N'<   тАж>\pyCore.dll' WITH PERMISSION_SET = UNSAFE 


pySQL

рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрд╣ SQL рд╕рд░реНрд╡рд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЪрд▓реЛ CLR рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд▓рд╛рдЗрди рдореЗрдВ рд╣рдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЕрдм рдЖрдкрдХреЛ pyCore рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЬрдм рдЖрдк рдПрдХ рдирдпрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдЕрд╕реЗрдВрдмрд▓реА рджреЗрдЦреЗрдВрдЧреЗред рдЙрдирдореЗрдВ рд╕реЗ рд╣рдо pyCore, Scripting рдФрд░ ScriptingCore рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред

рд╕реАрдПрд▓рдЖрд░ рд╕рдорд╛рд░реЛрд╣

рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ - рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рдиред
 public partial class UserDefinedFunctions { /// <summary> ///      IronPython /// </summary> /// <param name="cmd"> </param> /// <returns>  </returns> [Microsoft.SqlServer.Server.SqlFunction] public static object pyFunc(string cmd) { return pyCore.pyCore.py_exec(cmd); } /// <summary> ///      1  /// </summary> /// <param name="cmd"> </param> /// <param name="arg1"> 1.     args[0]</param> /// <returns>  </returns> [Microsoft.SqlServer.Server.SqlFunction] public static object pyFunc1(string cmd, object arg1) { return pyCore.pyCore.py_exec(cmd,null,arg1); } /// <summary> ///      2  /// </summary> /// <param name="cmd"> </param> /// <param name="arg1"> 1.     args[0]</param> /// <param name="arg2"> 2.     args[1]</param> /// <returns>  </returns> [Microsoft.SqlServer.Server.SqlFunction] public static object pyFunc2(string cmd, object arg1, object arg2) { return pyCore.pyCore.py_exec(cmd,null,arg1,arg2); } // pyFunc3, 4, ... , N }; 

рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдкреНрд░рддреНрдпрдХреНрд╖ py_exec рдХреЙрд▓ рдФрд░ рддрд░реНрдХ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рдиред рдпрд╣рд╛рдВ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рд╣реИрдВ: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рда рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╕рдордп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЖрд░реНрдЧреНрд╕ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
 --      select dbo.pyFunc('"'+name+'".upper()') from sys.all_objects --    select dbo.pyFunc1('str(args[0]).upper()',name) from sys.all_objects 

рдЬрдм рдЖрдк SQL рд╕рд░реНрд╡рд░ рдореЗрдВ CLR рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░рдг рд╕реЗ рдкрд░рдорд╕ рдХреАрд╡рд░реНрдб рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдЖрдкрдХреЛ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ, рддреАрди рд╕реЗ рдЪрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред

рд╕реАрдПрд▓рдЖрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛

 public partial class StoredProcedures { /// <summary> ///   CLR /// </summary> /// <param name="cmd"> </param> /// <returns>  Int,</returns> [Microsoft.SqlServer.Server.SqlProcedure] public static int pyProc(string cmd) { var scope = pyCore.pyCore.CreateScope(); //     SqlPipe scope.SetVariable("Pipe", SqlContext.Pipe); return (int)pyCore.pyCore.py_exec(cmd,scope); } }; 

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдереЛрдбрд╝реА рдЕрд▓рдЧ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ SqlPipe рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдк рдЯреЗрдмрд▓ рд░рд┐рдЬрд▓реНрдЯ рд▓реМрдЯрд╛ рд╕рдХреЗрдВ рдФрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХреЗрдВред

рдПрдХрддреНрд░реАрдХрд░рдг рд╕рдорд╛рд░реЛрд╣

Transact SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдордЧреНрд░ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рд╕реАрдПрд▓рдЖрд░ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╕реАрдПрд▓рдЖрд░ рдХреЗ рдХреБрд▓ рдХрд╛рд░реНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдХреНрдпреЛрдВ рд╣реИред
рдПрдЧреНрд░реАрдЧреЗрдЯ рдлрдВрдХреНрд╢рди рдХреЛрдб
 /// <summary> ///   /// </summary> [Serializable] [SqlUserDefinedAggregate( Format.UserDefined, //    ,  IBinarySerialize IsInvariantToNulls = false, IsInvariantToDuplicates = false, IsInvariantToOrder = false, MaxByteSize = 8000) ] public class pyAggregate : IBinarySerialize { /// <summary> ///   /// </summary> public ScriptScope scope; string init; string merge; string terminate; string accumulate; string save; string restore; /// <summary> ///      /// </summary> public void Init() { //    scope = pyCore.pyCore.CreateScope(); } /// <summary> ///  (    ) /// </summary> /// <param name="value">   </param> /// <param name="init"> </param> /// <param name="accumulate"> </param> /// <param name="merge">   </param> /// <param name="terminate"> </param> /// <param name="save"> </param> /// <param name="restore"> </param> public void Accumulate(object value, string init, string accumulate, string merge, string terminate, string save, string restore) { //   ,     scope.SetVariable("value", value); //      -           if (this.init == null) { this.init = init; this.merge = merge; this.terminate = terminate; this.accumulate = accumulate; this.save = save; this.restore = restore; pyCore.pyCore.py_exec(this.init, scope); } //    pyCore.pyCore.py_exec(this.accumulate, scope); } /// <summary> ///    /// </summary> /// <param name="other"></param> public void Merge(pyAggregate other) { pyCore.pyCore.py_setvar(scope, "otherdata", other); pyCore.pyCore.py_exec(this.merge, scope); } /// <summary> ///     /// </summary> /// <returns></returns> public object Terminate() { return pyCore.pyCore.py_exec(this.terminate, scope); } /// <summary> /// .   IBinarySerialize /// </summary> /// <param name="r"> </param> public void Read(BinaryReader r) { //    this.init = r.ReadString(); this.merge = r.ReadString(); this.accumulate = r.ReadString(); this.terminate = r.ReadString(); this.save = r.ReadString(); this.restore = r.ReadString(); //    scope = pyCore.pyCore.CreateScope(); //      BinaryReader, //       pyCore.pyCore.py_setvar(scope, "reader", r); pyCore.pyCore.py_exec(this.restore, scope); } /// <summary> /// .   IBinarySerialize /// </summary> /// <param name="w"> </param> public void Write(BinaryWriter w) { //    w.Write(this.init); w.Write(this.merge); w.Write(this.accumulate); w.Write(this.terminate); w.Write(this.save); w.Write(this.restore); //      BinaryWriter, //       pyCore.pyCore.py_setvar(scope, "writer", w); pyCore.pyCore.py_exec(this.save, scope); } } 


рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрд╕рдХреЗ рд░рд╛рдЬреНрдп рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IBinarySerialize рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ Init рдлрд╝рдВрдХреНрд╢рди рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Accumulate рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдкрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдПрдХрддреНрд░реАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧреНрд░рдВрде рд╕реНрд╡рдпрдВ рд╡рд╕реНрддреБ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреНрд░рдордмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ pySQL рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдирд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рдирд╛

рдЕрдм рдЬрдм рдЕрд╕реЗрдВрдмрд▓реА рддреИрдпрд╛рд░ рд╣реЛ рдЧрдИ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реАрдПрд▓рдЖрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
 CREATE ASSEMBLY PYSQL FROM N'<   тАж>\pySQL.dll' WITH PERMISSION_SET = UNSAFE 

рдЕрдм рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВред
 --   ,      CREATE FUNCTION [dbo].[pyFunc] (@cmd nvarchar(MAX)) RETURNS sql_variant AS EXTERNAL NAME PYSQL.[UserDefinedFunctions].[pyFunc]; GO --      CREATE FUNCTION [dbo].[pyFunc1] (@cmd nvarchar(MAX), @arg1 sql_variant) RETURNS sql_variant AS EXTERNAL NAME PYSQL.[UserDefinedFunctions].[pyFunc1]; GO --      CREATE FUNCTION [dbo].[pyFunc2] (@cmd nvarchar(MAX), @arg1 sql_variant, @arg2 sql_variant) RETURNS sql_variant AS EXTERNAL NAME PYSQL.[UserDefinedFunctions].[pyFunc2]; GO --   CREATE PROCEDURE pyProc (@code nvarchar(MAX)) AS EXTERNAL NAME PYSQL.StoredProcedures.pyProc GO --   CREATE AGGREGATE [dbo].[pyAggregate] ( @value sql_variant, @init nvarchar(MAX), @accumulate nvarchar(MAX), @merge nvarchar(MAX), @terminate nvarchar(MAX), @save nvarchar(MAX), @restore nvarchar(MAX) ) RETURNS sql_variant EXTERNAL NAME PYSQL.[pyAggregate]; GO 


рдкрд░рд┐рдгрд╛рдо


рдпрджрд┐ рдЖрдк рдЗрд╕ рдмрд┐рдВрджреБ рддрдХ рдкрдврд╝ рдЪреБрдХреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдХрд░ рдЦреБрдж рдХреЛ рдкреБрд░рд╕реНрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред

рд╕рдорд╛рд░реЛрд╣

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ - рд▓рд╛рдЗрди рдореЗрдВ рдИрдореЗрд▓ рдкрддреЗ рдвреВрдВрдвреЗрдВред рдЗрд╕рдХреЗ рдмрдирдиреЗ рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реАрдзреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ред
 select [dbo].[pyFunc]( ' import re mails = re.findall("[.\\-_a-z0-9]+@(?:[a-z0-9][\\-a-z0-9]+\\.)+[az]{2,6}","'+doc+'") result = ": " for mail in mails: result += mail + "," result[:-1] ' ) from ( select '     somebody@gmail.com' doc union select '     person1@mail.ru  person2@list.ru' doc ) SAMPLE_DATA 

рдкрд░рд┐рдгрд╛рдо:
рдкрд╛рдпрд╛: рдХреЛрдИ@gmail.com
рдорд┐рд▓рд╛: person1 @ mail.ru, person2 @ list.ru

рд╡рд╣реА, рд▓реЗрдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ - рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рддрд░реАрдХрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
 select [dbo].[pyFunc1]( ' import re mails = re.findall("[.\\-_a-z0-9]+@(?:[a-z0-9][\\-a-z0-9]+\\.)+[az]{2,6}",str(args[0])) result = ": " for mail in mails: result += mail + "," result[:-1] ', SAMPLE_DATA.doc ) from ( select '     somebody@gmail.com' doc union select '     person1@mail.ru  person2@list.ru' doc ) SAMPLE_DATA 

рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рд╣реИред

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ SQL рд╕рд░реНрд╡рд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рднрд╛рд╡реЛрдВ рдХрд╛ рдЧрддрд┐рд╢реАрд▓ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╣ sp_execute рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
 declare @InputFromula as nvarchar(MAX) SET @InputFromula = 'math.log(math.cosh(int(args[0]))/math.e,int(args[1]))' select [dbo].[pyFunc2] ( 'import math '+@InputFromula, 100,5 ) 


рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛

рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдПрдХ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рдпрд╣рд╛рдВ рд╣рдо SqlPipe рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдореИрд╕реЗрдЬ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдзреНрдпрд╛рди рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╣рдо рдПрдХ рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
 exec pyProc ' import clr clr.AddReference("System.Data") from Microsoft.SqlServer.Server import * from System.Data import * from System import DateTime Pipe.Send(" : !") metadata = ( SqlMetaData(" ", SqlDbType.NVarChar, 12), SqlMetaData("  ", SqlDbType.Int), SqlMetaData("  ", SqlDbType.DateTime) ) record = SqlDataRecord(metadata) record.SetString(0, "bocharovf"); record.SetInt32(1, 1000000); record.SetDateTime(2, DateTime.Now); #   Pipe.Send(record) 1 ' 

рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рдгрд╛рдо:
рд╣рдо рдПрдХ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ: рдЪрд▓реЛ рдЪрд▓реЗрдВ!
рдХрд░реНрдордЪрд╛рд░реА рдХрд╛ рдирд╛рдордЕрдкреЗрдХреНрд╖рд┐рдд рд╡реЗрддрдирд╡реГрджреНрдзрд┐ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд┐рдерд┐
bocharovf10000002012-12-31 02: 39: 51.293

(1 рдкрдВрдХреНрддрд┐) рдкреНрд░рднрд╛рд╡рд┐рдд

рдПрдХрддреНрд░реАрдХрд░рдг рд╕рдорд╛рд░реЛрд╣

рд╣рдо рдЕрдкрдиреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВрдЧреЗред рдХреНрд░рдорд╛рдВрдХрди рдФрд░ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдо рдмрд╛рдЗрдирд░реАрд░рдПрдбрд░ рдФрд░ рдмрд╛рдЗрдирд░реАрд╡рд░реНрдЯрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджрд┐рдП рдЧрдП рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдбреЗрдЯрд╛ рдЪрд░ рдореЗрдВ рдЬрдорд╛ рд╣реЛрддрд╛ рд╣реИред
 select dbo.pyAggregate ( --   SAMPLE_DATA.[language], --  'data = ""', --  'data += str(value) + ", "', '# nop', --   'data[:-2]', --  'writer.Write(str(data))', --  'data = reader.ReadString()' ) as Languages ,SAMPLE_DATA.IsUsed from ( select 'C#' [language], '  ' IsUsed union select 'T-SQL', '  ' union select 'IronPython', '  ' union select 'Cobol', '   ' union select 'Ada', '   ' union select 'Lisp', '   ' union select 'Fortran', '   ' ) SAMPLE_DATA group by SAMPLE_DATA.IsUsed 

рдкрд░рд┐рдгрд╛рдо:
рдмреЛрд▓реАIsUsed
рд╕реА #, рдЖрдпрд░рдирдкрд╛рдЗрдерди, рдЯреА-рдПрд╕рдХреНрдпреВрдПрд▓рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд
рдПрдбрд╛, рдХреЛрдмреЛрд▓, рдлреЛрд░рдЯреНрд░рд╛рди, рд▓рд┐рд╕реНрдкрд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛

(2 рдкрдВрдХреНрддрд┐) рдкреНрд░рднрд╛рд╡рд┐рдд

рдЙрддреНрдкрд╛рджрдХрддрд╛

рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ, рдкреНрд░рджрд░реНрд╢рди рдХрдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ T-SQL REVERSE рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рджрд╛рдИрдВ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдФрд░ рдЕрдЬрдЧрд░ рдореЗрдВ рд╕реНрд▓рд╛рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рд▓рдЧрднрдЧ 80 рдЧреБрдирд╛ рднрд┐рдиреНрди рд╣реИред

рд╕реБрд░рдХреНрд╖рд╛

 exec pyProc ' from System.Net import WebClient content = WebClient().DownloadString("http://habrahabr.ru/") Pipe.Send(content[:4000]) 1 ' 

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реА рдХреНрд╖рдорддрд╛рдПрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪ рдпрд╛ рдбрд┐рд╕реНрдХ рд╕реЗ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕реМрдВрдкрдиреЗ рдФрд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкрд╛рд╕рд┐рдВрдЧ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╡рд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЖрдпрд░рдирдкрд╛рдЗрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рд╕рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдпрд░рдирдкрд╛рдЗрдерди рдХреЗ рдХрд╛рд░реНрдп рдЬрдЯрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдЯреНрд░рд╛рдВрд╕реЗрдХреНрдЯ рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдпрд╛ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ (рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо, рдЗрдВрдЯрд░рдиреЗрдЯ) рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред IronPython рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдИ рднреА IronRuby рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ .NETред

Source: https://habr.com/ru/post/In164633/


All Articles