<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-6214778681897485490</id><updated>2009-11-09T10:02:53.306-08:00</updated><title type='text'>Alexander Kochurov developer's blog</title><subtitle type='html'>Hi! I am a software developer and my specialization is database, Transact-SQL, C#, SharePoint, CRM, AI development. You can find my details at www.sqlland.ru</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-2112744958305891742</id><published>2008-12-03T04:21:00.000-08:00</published><updated>2008-12-03T04:25:57.483-08:00</updated><title type='text'>How to install (uninstall) Windows service programmatically</title><content type='html'>&lt;div&gt;First, You should add reference to System.Configuration.Install&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Install service:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;            string ServiceFileName = @"c:\myservice.exe";&lt;/div&gt;&lt;div&gt;            System.Configuration.Install.AssemblyInstaller Installer = new System.Configuration.Install.AssemblyInstaller();&lt;/div&gt;&lt;div&gt;            Installer.Path = ServiceFileName;&lt;/div&gt;&lt;div&gt;            Installer.UseNewContext = true;&lt;/div&gt;&lt;div&gt;            Installer.Install(null);&lt;/div&gt;&lt;div&gt;            Installer.Commit(null);&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Uninstall service:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;            string ServiceFileName = @"c:\myservice.exe";&lt;/div&gt;&lt;div&gt;            System.Configuration.Install.AssemblyInstaller Installer = new System.Configuration.Install.AssemblyInstaller();&lt;/div&gt;&lt;div&gt;            Installer.Path = ServiceFileName;&lt;/div&gt;&lt;div&gt;            Installer.UseNewContext = true;&lt;/div&gt;&lt;div&gt;            Installer.Uninstall(null);&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-2112744958305891742?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/2112744958305891742/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=2112744958305891742' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/2112744958305891742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/2112744958305891742'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/12/how-to-install-uninstall-windows.html' title='How to install (uninstall) Windows service programmatically'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-6252813468675736349</id><published>2008-08-22T02:24:00.000-07:00</published><updated>2008-08-22T02:49:17.764-07:00</updated><title type='text'>SQL Server 2005: how to publish trigger from assembly</title><content type='html'>&lt;p&gt;&lt;strong&gt;1. Reconfigure server state for CLR assembly use&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;sp_configure 'clr enabled', 1;&lt;br /&gt;GO&lt;br /&gt;RECONFIGURE;&lt;br /&gt;GO&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;2. Enable TRUSTWORTHY property of database&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;ALTER DATABASE database_name SET TRUSTWORTHY ON&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;3. Register assembly in database&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;CREATE ASSEMBLY assembly_name&lt;br /&gt;FROM assembly_full_path&lt;br /&gt;WITH PERMISSION_SET = UNSAFE;&lt;br /&gt;GO&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;4.  Create trigger  on the table&lt;/strong&gt;&lt;br /&gt;USE database_name&lt;br /&gt;IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class = 0 AND name = 'trigger_name') DROP TRIGGER trigger_name ON DATABASE&lt;br /&gt;GO&lt;br /&gt;CREATE TRIGGER trigger_name ON table_name AFTER INSERT, UPDATE, DELETE&lt;br /&gt;AS&lt;br /&gt;EXTERNAL NAME assembly_name.trigger_class_name.trigger_method&lt;br /&gt;GO&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-6252813468675736349?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/6252813468675736349/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=6252813468675736349' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/6252813468675736349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/6252813468675736349'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/08/sql-server-2005-hot-to-publish-trigger.html' title='SQL Server 2005: how to publish trigger from assembly'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-8307165037364516464</id><published>2008-08-20T06:56:00.000-07:00</published><updated>2008-08-22T04:01:27.003-07:00</updated><title type='text'>Trigger in SQL Server Error: MSDTC on server is unavailable</title><content type='html'>&lt;p&gt;I found decision here:&lt;/p&gt;&lt;p&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=54705&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;On the server where the trigger resides, you need to turn the MSDTC service on. You can this by clicking START &gt; SETTINGS &gt; CONTROL PANEL &gt; ADMINISTRATIVE TOOLS &gt; SERVICES. Find the service called 'Distributed Transaction Coordinator' and RIGHT CLICK (on it and select) &gt; Start.&lt;br /&gt;&lt;br /&gt;Test the trigger and see if it works. If it still does not work, wrap you trigger in the following transaction code (found below in bold):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SET XACT_ABORT ON&lt;br /&gt;BEGIN DISTRIBUTED TRANSACTION&lt;br /&gt;&lt;br /&gt;-- Put all queries in here (SELECT, INSERT, UPDATE, and DELETE)&lt;br /&gt;select * from [SERVER2].[DBASE].[OWNER].[TABLENAME]&lt;br /&gt;update [SERVER2].[DBASE].[OWNER].[TABLENAME]&lt;br /&gt;set [column] = value&lt;br /&gt;where [condition(s)]&lt;br /&gt;&lt;br /&gt;COMMIT TRANSACTION&lt;br /&gt;SET XACT_ABORT OFF&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-8307165037364516464?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/8307165037364516464/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=8307165037364516464' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/8307165037364516464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/8307165037364516464'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/08/trigger-in-sql-server-error-msdtc-on.html' title='Trigger in SQL Server Error: MSDTC on server is unavailable'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-7707391404922232783</id><published>2008-07-24T00:20:00.000-07:00</published><updated>2008-07-24T00:24:09.833-07:00</updated><title type='text'>How generate CRM4 proxy-class</title><content type='html'>Example of command file:&lt;br /&gt;&lt;br /&gt;cd "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin"&lt;br /&gt;&lt;br /&gt;wsdl /out:c:\CrmProxy.cs /n:YourCrmService http://localhost/MSCRMServices/2007/CrmServiceWsdl.aspx?wsdl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-7707391404922232783?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/7707391404922232783/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=7707391404922232783' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/7707391404922232783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/7707391404922232783'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/07/how-generate-crm4-proxy-class.html' title='How generate CRM4 proxy-class'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-2410081275264696361</id><published>2008-07-23T03:58:00.000-07:00</published><updated>2008-07-23T04:06:35.264-07:00</updated><title type='text'>Execute T-SQL script from C# code</title><content type='html'>if (filename.Length &gt; 0)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        // Open the file to read from.&lt;br /&gt;        using (StreamReader sr = File.OpenText(filename))&lt;br /&gt;        {&lt;br /&gt;            string queryString = sr.ReadToEnd().Replace("GO", "");&lt;br /&gt;&lt;br /&gt;            using (SqlConnection connection = new SqlConnection(ASSettings.ConnectionString))&lt;br /&gt;            {&lt;br /&gt;                SqlCommand command = new SqlCommand(queryString, connection);&lt;br /&gt;                command.Connection.Open();&lt;br /&gt;                command.ExecuteNonQuery();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        MessageBox.Show("Script executed.", "Result", MessageBoxButtons.OK, &lt;br /&gt;            MessageBoxIcon.Information);&lt;br /&gt;    }&lt;br /&gt;    catch (Exception ex)&lt;br /&gt;    {&lt;br /&gt;        MessageBox.Show("Error script execution!\n" + ex.Message, &lt;br /&gt;            "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);&lt;br /&gt;    }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-2410081275264696361?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/2410081275264696361/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=2410081275264696361' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/2410081275264696361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/2410081275264696361'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/07/execute-t-sql-script-from-c-code.html' title='Execute T-SQL script from C# code'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-4553227535851308279</id><published>2008-07-17T00:45:00.000-07:00</published><updated>2008-07-17T00:47:08.624-07:00</updated><title type='text'>Repair DBF structure (if damaged file header)</title><content type='html'>SET TABLEVALIDATE TO 3&lt;br /&gt;CD "C:\Repair\"&lt;br /&gt;&lt;br /&gt;OPEN DATABASE osago EXCLUSIVE&lt;br /&gt;VALIDATE DATABASE TO FILE before.txt&lt;br /&gt;&lt;br /&gt;lnDBF = ADIR(laDBF,"*.dbf")&lt;br /&gt;FOR i = 1 TO lnDBF&lt;br /&gt;  TRY&lt;br /&gt;    USE (laDBF[i,1]) EXCLUSIVE&lt;br /&gt;  CATCH&lt;br /&gt;    SET TABLEVALIDATE TO 0&lt;br /&gt;    USE (laDBF[i,1]) EXCLUSIVE&lt;br /&gt;&lt;br /&gt;    MESSAGEBOX("Table "+laDBF[i,1]+" could not be opened. "+CHR(13)+;&lt;br /&gt;                           "Please delete any damaged records (Ctrl-T). "+CHR(13)+;&lt;br /&gt;                           "Press Ctrl-W when finished",16)&lt;br /&gt;&lt;br /&gt;    BROWSE&lt;br /&gt;    SET TABLEVALIDATE TO 3&lt;br /&gt;  FINALLY&lt;br /&gt;    PACK&lt;br /&gt;    REINDEX&lt;br /&gt;  ENDTRY&lt;br /&gt;NEXT&lt;br /&gt;VALIDATE DATABASE RECOVER TO FILE after.txt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-4553227535851308279?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/4553227535851308279/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=4553227535851308279' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/4553227535851308279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/4553227535851308279'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/07/repair-dbf-structure-if-damaged-file.html' title='Repair DBF structure (if damaged file header)'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-4749183002413746073</id><published>2008-06-30T02:09:00.000-07:00</published><updated>2008-06-30T02:21:40.857-07:00</updated><title type='text'>CRM 4: user-side call jscript event handler for CRM-entity</title><content type='html'>// CRM 4.0 SDK Example&lt;br /&gt;// Define the soapBody for the WhoAmI request.&lt;br /&gt;// Difference from Microsoft CRM 3.0 is requirement to call method GenerateAuthenticationHeader() in SOAP Envelope&lt;br /&gt;&lt;br /&gt;var soapBody = "&lt;soap:Body&gt;"; &lt;br /&gt;soapBody += "&lt;Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\"&gt;";&lt;br /&gt;soapBody += "&lt;Request xsi:type=\"WhoAmIRequest\" /&gt;";&lt;br /&gt;soapBody += "&lt;/Execute&gt;&lt;/soap:Body&gt;";&lt;br /&gt;//Wrap the Soap Body in a soap:Envelope.&lt;br /&gt;var soapXml = "&lt;soap:Envelope ";&lt;br /&gt;soapXml += "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" ";&lt;br /&gt;soapXml += "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";&lt;br /&gt;soapXml += "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"&gt;";&lt;br /&gt;soapXml += GenerateAuthenticationHeader();&lt;br /&gt;soapXml += soapBody;&lt;br /&gt;soapXml += "&lt;/soap:Envelope&gt;";&lt;br /&gt;var SERVER_URL = "http://crm4.company.ru:5555";&lt;br /&gt;// Create the XMLHTTP object for the execute method.&lt;br /&gt;var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");&lt;br /&gt;xmlhttp.open("POST", SERVER_URL + "/mscrmservices/2007/crmservice.asmx", false);&lt;br /&gt;xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");&lt;br /&gt;xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");&lt;br /&gt;//Send the XMLHTTP object.&lt;br /&gt;xmlhttp.send(soapXml);&lt;br /&gt;// Create an XML object to parse the results.&lt;br /&gt;xmlDoc = new ActiveXObject("Microsoft.XMLDOM");&lt;br /&gt;xmlDoc.async = false;&lt;br /&gt;xmlDoc.loadXML(xmlhttp.responseXML.xml);&lt;br /&gt;// Get the user's ID.&lt;br /&gt;var userid = xmlDoc.getElementsByTagName("UserId")[0].childNodes[0].nodeValue;&lt;br /&gt;alert(userid);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-4749183002413746073?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/4749183002413746073/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=4749183002413746073' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/4749183002413746073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/4749183002413746073'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/06/crm-4-user-side-call-jscript-event.html' title='CRM 4: user-side call jscript event handler for CRM-entity'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-3248344202729002803</id><published>2008-06-24T23:04:00.000-07:00</published><updated>2008-06-30T02:23:29.884-07:00</updated><title type='text'>T-SQL example: "UPSERT" model (Insert + Update) by T-SQL with changeable number of input parameters</title><content type='html'>ALTER PROCEDURE [dbo].[spSave] &lt;br/&gt; @InputItems char(2048)&lt;br/&gt;AS&lt;br/&gt;BEGIN&lt;br/&gt; SET NOCOUNT ON;&lt;br/&gt;&lt;br/&gt; DECLARE @FilterID INT;&lt;br/&gt; SET @FilterID = -1;&lt;br/&gt;&lt;br/&gt; BEGIN TRANSACTION;&lt;br/&gt;&lt;br/&gt; DECLARE @TempString varchar(2048)&lt;br/&gt; DECLARE @Temp varchar(2048)&lt;br/&gt; DECLARE @ChPos int&lt;br/&gt;&lt;br/&gt; DELETE FROM WorkTable WHERE ID = @FilterID&lt;br/&gt;&lt;br/&gt; IF @InputItems &lt;&gt; ''&lt;br/&gt; BEGIN &lt;br/&gt;         SET @TempString = ''&lt;br/&gt;  SET @Temp = ''&lt;br/&gt;  SET @ChPos = -1&lt;br/&gt;&lt;br/&gt;  SET @TempString = @InputItems&lt;br/&gt;&lt;br/&gt;  SET @ChPos = CHARINDEX(',', @TempString)&lt;br/&gt;&lt;br/&gt;  WHILE @ChPos &gt; 0&lt;br/&gt;  BEGIN&lt;br/&gt;   SET @Temp = SUBSTRING(@TempString, 1, (@ChPos - 1))&lt;br/&gt;   INSERT INTO WorkTable &lt;br/&gt;    (ID, YourValue) &lt;br/&gt;    VALUES &lt;br/&gt;    (@FilterID, CAST(@Temp AS int))&lt;br/&gt;&lt;br/&gt;   IF @@ERROR != 0 GOTO ErrorHandler&lt;br/&gt;&lt;br/&gt;   SET @TempString = SUBSTRING(&lt;br/&gt;    @TempString, &lt;br/&gt;    (@ChPos + 1), &lt;br/&gt;    (LEN(@TempString) - @ChPos))&lt;br/&gt;   SET @ChPos = CHARINDEX(',', @TempString)&lt;br/&gt;  END&lt;br/&gt;&lt;br/&gt;  INSERT INTO WorkTable &lt;br/&gt;   (ID, YourValue) &lt;br/&gt;   VALUES &lt;br/&gt;   (@FilterID, CAST(@TempString AS int))&lt;br/&gt;    IF @@ERROR != 0 GOTO ErrorHandler&lt;br/&gt; END&lt;br/&gt; COMMIT TRANSACTION&lt;br/&gt;&lt;br/&gt; SELECT @FilterID AS RetVal&lt;br/&gt; RETURN 0&lt;br/&gt;ErrorHandler:&lt;br/&gt; SELECT @FilterID AS RetVal&lt;br/&gt; IF @@TRANCOUNT != 0 ROLLBACK TRANSACTION&lt;br/&gt; RETURN @@ERROR&lt;br/&gt;END&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-3248344202729002803?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/3248344202729002803/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=3248344202729002803' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/3248344202729002803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/3248344202729002803'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/06/upsert-model-inser-update-by-t-sql-with.html' title='T-SQL example: &quot;UPSERT&quot; model (Insert + Update) by T-SQL with changeable number of input parameters'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6214778681897485490.post-326809408253655681</id><published>2008-06-24T05:00:00.000-07:00</published><updated>2008-06-24T05:28:14.997-07:00</updated><title type='text'>T-SQL example: dynamically generate columns by table</title><content type='html'>DECLARE @Seria INT&lt;br /&gt;SET @Seria = 15&lt;br /&gt;&lt;br /&gt;DECLARE @Kpcount INT&lt;br /&gt;SELECT @Kpcount = Pairs * Sections FROM S_SeriaTPS WHERE ID = @Seria&lt;br /&gt;&lt;br /&gt;DECLARE @Cnt INT&lt;br /&gt;SET @Cnt=1&lt;br /&gt;&lt;br /&gt;-- Colums list string&lt;br /&gt;DECLARE @sf_1 VARCHAR(MAX)&lt;br /&gt;SET @sf_1 = ''&lt;br /&gt;&lt;br /&gt;-- Join section string&lt;br /&gt;DECLARE @sj_1 VARCHAR(MAX)&lt;br /&gt;SET @sj_1 = ''&lt;br /&gt;&lt;br /&gt;DECLARE @ChkVal INT&lt;br /&gt;SET @ChkVal = 0&lt;br /&gt;&lt;br /&gt;WHILE (@Cnt &lt;= @Kpcount) &lt;br /&gt;BEGIN&lt;br /&gt; SET @sf_1 = @sf_1 + &lt;br /&gt;  ', t0' + RTRIM(CAST(@Cnt AS CHAR(2))) + '.RepDate AS [Date ' + RTRIM(CAST(@Cnt AS CHAR(2))) + '], ' +&lt;br /&gt;  't0' + RTRIM(CAST(@Cnt AS CHAR(2))) + '.DiamAv AS [Diameter avg ' + RTRIM(CAST(@Cnt AS CHAR(2))) + '] '&lt;br /&gt;&lt;br /&gt; -- Generate join section&lt;br /&gt; SET @sj_1 = @sj_1 + &lt;br /&gt;  'LEFT JOIN (&lt;br /&gt;   SELECT &lt;br /&gt;    tk.IDTps,&lt;br /&gt;    cm.RepDate,&lt;br /&gt;    tk.Position,&lt;br /&gt;    DiamAv = &lt;br /&gt;     ABS(&lt;br /&gt;     COALESCE((bm.DiamL - (bm.TolshBandL - cm.TolshBandL) * 2), bm.DiamL) +&lt;br /&gt;     COALESCE((bm.DiamR - (bm.TolshBandR - cm.TolshBandR) * 2), bm.DiamR)) / 2&lt;br /&gt;   FROM TpsKp tk &lt;br /&gt;   LEFT JOIN BasicMeasurements bm ON bm.IDKp=tk.IDKp&lt;br /&gt;   LEFT JOIN Measurements cm ON &lt;br /&gt;    cm.ID=(&lt;br /&gt;     SELECT TOP 1 cm1.ID &lt;br /&gt;     FROM Measurements cm1 &lt;br /&gt;     WHERE cm1.IDKp=tk.IDKp&lt;br /&gt;     ORDER BY cm1.RepDate DESC)&lt;br /&gt;   WHERE tk.Position=' + RTRIM(CAST(@Cnt AS CHAR(2))) + &lt;br /&gt;  ') t0' + RTRIM(CAST(@Cnt AS CHAR(2))) + ' ON t0' + RTRIM(CAST(@Cnt AS CHAR(2))) + '.IDTps=t.ID '&lt;br /&gt;&lt;br /&gt; -- Column counter increment&lt;br /&gt; SET @Cnt = @Cnt + 1&lt;br /&gt; CONTINUE&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;DECLARE @sql VARCHAR(MAX)&lt;br /&gt;SET @sql = &lt;br /&gt;'SELECT RTrim(t.Nomer) AS [Name] {0} FROM Tps t {1} WHERE t.IDSeria=' + &lt;br /&gt;RTRIM(CAST(@Seria AS CHAR(3))) + ' ' +&lt;br /&gt;'ORDER BY Nomer'&lt;br /&gt;&lt;br /&gt;IF @sf_1 = '' &lt;br /&gt;BEGIN &lt;br /&gt; SET &lt;br /&gt;  @sf_1 = ', ''no data'' AS [Info]' &lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;SET @sql = REPLACE(@sql, '{0}', @sf_1)&lt;br /&gt;SET @sql = REPLACE(@sql, '{1}', @sj_1)&lt;br /&gt;&lt;br /&gt;EXEC (@sql)&lt;br /&gt;&lt;br /&gt;-----------------------&lt;br /&gt;Result seem's like this&lt;br /&gt;Name  Date 1                  Diameter avg 1   Date 2                   Diameter avg 2&lt;br /&gt;316 2007-12-28 13:11:23.000 1254            2007-12-28 13:12:16.000 1255&lt;br /&gt;319 2008-01-19 14:55:00.000 1250            2008-01-19 14:56:30.000 1255&lt;br /&gt;321 2008-02-15 13:15:21.000 1212            2008-02-15 13:15:37.000 1213&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6214778681897485490-326809408253655681?l=akochurov.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akochurov.blogspot.com/feeds/326809408253655681/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6214778681897485490&amp;postID=326809408253655681' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/326809408253655681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6214778681897485490/posts/default/326809408253655681'/><link rel='alternate' type='text/html' href='http://akochurov.blogspot.com/2008/06/t-sql-example-dynamically-generate.html' title='T-SQL example: dynamically generate columns by table'/><author><name>nwm</name><uri>http://www.blogger.com/profile/11905520968599349090</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14169389963246541603'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>