<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7918513662268022288</id><updated>2011-11-27T16:14:29.539-08:00</updated><category term='Connection String'/><category term='Commit Tran'/><category term='Begin Tran'/><category term='Tips SQL'/><category term='Data Set'/><category term='RollBack Tran'/><category term='syscomments'/><category term='SQL 2005'/><category term='VB.NET'/><category term='Query Options'/><category term='sys.objects'/><category term='ASP.NET'/><category term='Excel'/><title type='text'>Tips And Tricks Programmer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-6306602390314823309</id><published>2010-01-24T22:47:00.001-08:00</published><updated>2010-01-24T22:58:02.263-08:00</updated><title type='text'>Store Procedure for Audit Trial in SQL</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Here the code for create procedure to deploy audit trial in sql :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/****** Object:  StoredProcedure [dbo].[GenerateAudittrail]    Script Date: 01/25/2010 13:30:29 ******/&lt;br /&gt;IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GenerateAudittrail]') AND type in (N'P', N'PC'))&lt;br /&gt;DROP PROCEDURE [dbo].[GenerateAudittrail]&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE [dbo].[GenerateAudittrail]&lt;br /&gt;    @TableName varchar(128),&lt;br /&gt;    @Owner varchar(128) = 'dbo',&lt;br /&gt;    @AuditNameExtention varchar(128) = '_shadow',&lt;br /&gt;    @DropAuditTable bit = 0&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;    -- Check if table exists&lt;br /&gt;    IF not exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[' + @Owner + '].[' + @TableName + ']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)&lt;br /&gt;    BEGIN&lt;br /&gt;        PRINT 'ERROR: Table does not exist'&lt;br /&gt;        RETURN&lt;br /&gt;    END&lt;br /&gt;&lt;br /&gt;    -- Check @AuditNameExtention&lt;br /&gt;    IF @AuditNameExtention is null&lt;br /&gt;    BEGIN&lt;br /&gt;        PRINT 'ERROR: @AuditNameExtention cannot be null'&lt;br /&gt;        RETURN&lt;br /&gt;    END&lt;br /&gt;&lt;br /&gt;    -- Drop audit table if it exists and drop should be forced&lt;br /&gt;    IF (exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[' + @Owner + '].[' + @TableName + @AuditNameExtention + ']') and OBJECTPROPERTY(id, N'IsUserTable') = 1) and @DropAuditTable = 1)&lt;br /&gt;    BEGIN&lt;br /&gt;        PRINT 'Dropping audit table [' + @Owner + '].[' + @TableName + @AuditNameExtention + ']'&lt;br /&gt;        EXEC ('drop table ' + @TableName + @AuditNameExtention)&lt;br /&gt;    END&lt;br /&gt;&lt;br /&gt;    -- Declare cursor to loop over columns&lt;br /&gt;    DECLARE TableColumns CURSOR Read_Only&lt;br /&gt;    FOR SELECT b.name, c.name as TypeName, b.length, b.isnullable, b.collation, b.xprec, b.xscale&lt;br /&gt;        FROM sysobjects a&lt;br /&gt;        inner join syscolumns b on a.id = b.id&lt;br /&gt;        inner join systypes c on b.xtype = c.xtype and c.name &lt;&gt; 'sysname'&lt;br /&gt;        WHERE a.id = object_id(N'[' + @Owner + '].[' + @TableName + ']')&lt;br /&gt;        and OBJECTPROPERTY(a.id, N'IsUserTable') = 1&lt;br /&gt;        ORDER BY b.colId&lt;br /&gt;&lt;br /&gt;    OPEN TableColumns&lt;br /&gt;&lt;br /&gt;    -- Declare temp variable to fetch records into&lt;br /&gt;    DECLARE @ColumnName varchar(128)&lt;br /&gt;    DECLARE @ColumnType varchar(128)&lt;br /&gt;    DECLARE @ColumnLength smallint&lt;br /&gt;    DECLARE @ColumnNullable int&lt;br /&gt;    DECLARE @ColumnCollation sysname&lt;br /&gt;    DECLARE @ColumnPrecision tinyint&lt;br /&gt;    DECLARE @ColumnScale tinyint&lt;br /&gt;&lt;br /&gt;    -- Declare variable to build statements&lt;br /&gt;    DECLARE @CreateStatement varchar(8000)&lt;br /&gt;    DECLARE @ListOfFields varchar(2000)&lt;br /&gt;    SET @ListOfFields = ''&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    -- Check if audit table exists&lt;br /&gt;    IF exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[' + @Owner + '].[' + @TableName + @AuditNameExtention + ']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)&lt;br /&gt;    BEGIN&lt;br /&gt;        -- AuditTable exists, update needed&lt;br /&gt;        PRINT 'Table already exists. Only triggers will be updated.'&lt;br /&gt;&lt;br /&gt;        FETCH Next FROM TableColumns&lt;br /&gt;        INTO @ColumnName, @ColumnType, @ColumnLength, @ColumnNullable, @ColumnCollation, @ColumnPrecision, @ColumnScale&lt;br /&gt;       &lt;br /&gt;        WHILE @@FETCH_STATUS = 0&lt;br /&gt;        BEGIN&lt;br /&gt;            IF (@ColumnType &lt;&gt; 'text' and @ColumnType &lt;&gt; 'ntext' and @ColumnType &lt;&gt; 'image' and @ColumnType &lt;&gt; 'timestamp')&lt;br /&gt;            BEGIN&lt;br /&gt;                SET @ListOfFields = @ListOfFields + @ColumnName + ','&lt;br /&gt;            END&lt;br /&gt;&lt;br /&gt;            FETCH Next FROM TableColumns&lt;br /&gt;            INTO @ColumnName, @ColumnType, @ColumnLength, @ColumnNullable, @ColumnCollation, @ColumnPrecision, @ColumnScale&lt;br /&gt;&lt;br /&gt;        END&lt;br /&gt;    END&lt;br /&gt;    ELSE&lt;br /&gt;    BEGIN&lt;br /&gt;        -- AuditTable does not exist, create new&lt;br /&gt;&lt;br /&gt;        -- Start of create table&lt;br /&gt;        SET @CreateStatement = 'CREATE TABLE [' + @Owner + '].[' + @TableName + @AuditNameExtention + '] ('&lt;br /&gt;        SET @CreateStatement = @CreateStatement + '[AuditId] [bigint] IDENTITY (1, 1) NOT NULL,'&lt;br /&gt;&lt;br /&gt;        FETCH Next FROM TableColumns&lt;br /&gt;        INTO @ColumnName, @ColumnType, @ColumnLength, @ColumnNullable, @ColumnCollation, @ColumnPrecision, @ColumnScale&lt;br /&gt;       &lt;br /&gt;        WHILE @@FETCH_STATUS = 0&lt;br /&gt;        BEGIN&lt;br /&gt;            IF (@ColumnType &lt;&gt; 'text' and @ColumnType &lt;&gt; 'ntext' and @ColumnType &lt;&gt; 'image' and @ColumnType &lt;&gt; 'timestamp')&lt;br /&gt;            BEGIN&lt;br /&gt;                SET @ListOfFields = @ListOfFields + @ColumnName + ','&lt;br /&gt;       &lt;br /&gt;                SET @CreateStatement = @CreateStatement + '[' + @ColumnName + '] [' + @ColumnType + '] '&lt;br /&gt;               &lt;br /&gt;                IF @ColumnType in ('binary', 'char', 'nchar', 'nvarchar', 'varbinary', 'varchar')&lt;br /&gt;                BEGIN&lt;br /&gt;                    IF (@ColumnLength = -1)&lt;br /&gt;                        Set @CreateStatement = @CreateStatement + '(max) '        &lt;br /&gt;                    ELSE&lt;br /&gt;                        SET @CreateStatement = @CreateStatement + '(' + cast(@ColumnLength as varchar(10)) + ') '        &lt;br /&gt;                END&lt;br /&gt;       &lt;br /&gt;                IF @ColumnType in ('decimal', 'numeric')&lt;br /&gt;                    SET @CreateStatement = @CreateStatement + '(' + cast(@ColumnPrecision as varchar(10)) + ',' + cast(@ColumnScale as varchar(10)) + ') '        &lt;br /&gt;       &lt;br /&gt;                IF @ColumnType in ('char', 'nchar', 'nvarchar', 'varchar', 'text', 'ntext')&lt;br /&gt;                    SET @CreateStatement = @CreateStatement + 'COLLATE ' + @ColumnCollation + ' '&lt;br /&gt;       &lt;br /&gt;                IF @ColumnNullable = 0&lt;br /&gt;                    SET @CreateStatement = @CreateStatement + 'NOT '        &lt;br /&gt;       &lt;br /&gt;                SET @CreateStatement = @CreateStatement + 'NULL, '        &lt;br /&gt;            END&lt;br /&gt;&lt;br /&gt;            FETCH Next FROM TableColumns&lt;br /&gt;            INTO @ColumnName, @ColumnType, @ColumnLength, @ColumnNullable, @ColumnCollation, @ColumnPrecision, @ColumnScale&lt;br /&gt;        END&lt;br /&gt;       &lt;br /&gt;        -- Add audit trail columns&lt;br /&gt;        SET @CreateStatement = @CreateStatement + '[AuditAction] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,'&lt;br /&gt;        SET @CreateStatement = @CreateStatement + '[AuditDate] [datetime] NOT NULL ,'&lt;br /&gt;        SET @CreateStatement = @CreateStatement + '[AuditUser] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,'&lt;br /&gt;        SET @CreateStatement = @CreateStatement + '[AuditApp] [varchar](128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL)'&lt;br /&gt;&lt;br /&gt;        -- Create audit table&lt;br /&gt;        PRINT 'Creating audit table [' + @Owner + '].[' + @TableName + @AuditNameExtention + ']'&lt;br /&gt;        EXEC (@CreateStatement)&lt;br /&gt;&lt;br /&gt;        -- Set primary key and default values&lt;br /&gt;        SET @CreateStatement = 'ALTER TABLE [' + @Owner + '].[' + @TableName + @AuditNameExtention + '] ADD '&lt;br /&gt;        SET @CreateStatement = @CreateStatement + 'CONSTRAINT [DF_' + @TableName + @AuditNameExtention + '_AuditDate] DEFAULT (getdate()) FOR [AuditDate],'&lt;br /&gt;        SET @CreateStatement = @CreateStatement + 'CONSTRAINT [DF_' + @TableName + @AuditNameExtention + '_AuditUser] DEFAULT (suser_sname()) FOR [AuditUser],CONSTRAINT [PK_' + @TableName + @AuditNameExtention + '] PRIMARY KEY  CLUSTERED '&lt;br /&gt;        SET @CreateStatement = @CreateStatement + '([AuditId])  ON [PRIMARY], '&lt;br /&gt;        SET @CreateStatement = @CreateStatement + 'CONSTRAINT [DF_' + @TableName + @AuditNameExtention + '_AuditApp]  DEFAULT (''App=('' + rtrim(isnull(app_name(),'''')) + '') '') for [AuditApp]'&lt;br /&gt;&lt;br /&gt;        EXEC (@CreateStatement)&lt;br /&gt;&lt;br /&gt;    END&lt;br /&gt;&lt;br /&gt;    CLOSE TableColumns&lt;br /&gt;    DEALLOCATE TableColumns&lt;br /&gt;&lt;br /&gt;    /* Drop Triggers, if they exist */&lt;br /&gt;    PRINT 'Dropping triggers'&lt;br /&gt;    IF exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[' + @Owner + '].[tr_' + @TableName + '_Insert]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)&lt;br /&gt;        EXEC ('drop trigger [' + @Owner + '].[tr_' + @TableName + '_Insert]')&lt;br /&gt;&lt;br /&gt;    IF exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[' + @Owner + '].[tr_' + @TableName + '_Update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)&lt;br /&gt;        EXEC ('drop trigger [' + @Owner + '].[tr_' + @TableName + '_Update]')&lt;br /&gt;&lt;br /&gt;    IF exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[' + @Owner + '].[tr_' + @TableName + '_Delete]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)&lt;br /&gt;        EXEC ('drop trigger [' + @Owner + '].[tr_' + @TableName + '_Delete]')&lt;br /&gt;&lt;br /&gt;    /* Create triggers */&lt;br /&gt;    PRINT 'Creating triggers'&lt;br /&gt;    EXEC ('CREATE TRIGGER tr_' + @TableName + '_Insert ON ' + @Owner + '.' + @TableName + ' FOR INSERT AS INSERT INTO ' + @TableName + @AuditNameExtention + '(' +  @ListOfFields + 'AuditAction) SELECT ' + @ListOfFields + '''I'' FROM Inserted')&lt;br /&gt;&lt;br /&gt;    EXEC ('CREATE TRIGGER tr_' + @TableName + '_Update ON ' + @Owner + '.' + @TableName + ' FOR UPDATE AS INSERT INTO ' + @TableName + @AuditNameExtention + '(' +  @ListOfFields + 'AuditAction) SELECT ' + @ListOfFields + '''U'' FROM Inserted')&lt;br /&gt;&lt;br /&gt;    EXEC ('CREATE TRIGGER tr_' + @TableName + '_Delete ON ' + @Owner + '.' + @TableName + ' FOR DELETE AS INSERT INTO ' + @TableName + @AuditNameExtention + '(' +  @ListOfFields + 'AuditAction) SELECT ' + @ListOfFields + '''D'' FROM Deleted')&lt;br /&gt;&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;After you create the procedure, try this :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;create table testing1&lt;br /&gt;(&lt;br /&gt;    id int identity(1,1) not null,&lt;br /&gt;    name varchar(50),&lt;br /&gt;    primary key (id)&lt;br /&gt;)&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;exec [GenerateAudittrail] testing1, 'dbo', '_history', 1&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;insert into testing1(name) values('Wihemdra')&lt;br /&gt;insert into testing1(name) values('Halim')&lt;br /&gt;update testing1 set name = 'Wihemdra1' where id = 1&lt;br /&gt;delete from testing1 where id = 2&lt;br /&gt;&lt;br /&gt;select * From testing1&lt;br /&gt;select * from testing1_history&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Then you can find what exactly the procedure use for.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Happy Code ^_^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-6306602390314823309?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/6306602390314823309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2010/01/store-procedure-for-audit-trial-in-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/6306602390314823309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/6306602390314823309'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2010/01/store-procedure-for-audit-trial-in-sql.html' title='Store Procedure for Audit Trial in SQL'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-8347426041843861072</id><published>2010-01-17T19:44:00.000-08:00</published><updated>2010-01-17T19:58:58.063-08:00</updated><title type='text'>Capture Error Message on Procedure</title><content type='html'>When we want to make a procedure from sql, sometimes we need to capture the error message on procedure. It will allow us to make an history into the physical table on databases. Here the simulation :&lt;br /&gt;&lt;br /&gt;---------------------------------&lt;br /&gt;if exists(select 1 from sys.objects where name = 't_test') drop table t_test&lt;br /&gt;&lt;br /&gt;create table t_test&lt;br /&gt;(&lt;br /&gt;   id int not null,&lt;br /&gt;   primary key(id)&lt;br /&gt;)&lt;br /&gt;go&lt;br /&gt;---------------------------------&lt;br /&gt;if exists(select 1 from sys.objects where name = 't_msg') drop table t_msg&lt;br /&gt;&lt;br /&gt;create table t_msg&lt;br /&gt;(&lt;br /&gt;   id int identity(1,1) not null,&lt;br /&gt;msg varchar(max) not null,&lt;br /&gt;date datetime,&lt;br /&gt;primary key(id)&lt;br /&gt;)&lt;br /&gt;go&lt;br /&gt;---------------------------------&lt;br /&gt;if exists(select 1 from sys.objects where name = 'sp_addTest') drop procedure sp_addTest&lt;br /&gt;---------------------------------&lt;br /&gt;create procedure sp_addTest&lt;br /&gt;@id int&lt;br /&gt;as&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;begin try&lt;br /&gt;   begin tran&lt;br /&gt;  insert into t_test values(@id)&lt;br /&gt; commit tran&lt;br /&gt;end try&lt;br /&gt;  begin catch    &lt;br /&gt;         declare @err_msg varchar(max), @err_proc varchar(max)&lt;br /&gt;   set @err_msg = ERROR_MESSAGE()&lt;br /&gt;   set @err_proc = ERROR_PROCEDURE()        &lt;br /&gt;   rollback tran&lt;br /&gt;&lt;br /&gt;   insert t_msg(msg,date) select 'sp_addTest Error : '+ltrim(rtrim(@err_msg))+ 'Error in '+@err_proc,getdate()&lt;br /&gt;    end catch&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;go&lt;br /&gt;---------------------------------&lt;br /&gt;exec sp_addTest 2&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;exec sp_addTest 3&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;exec sp_addTest 4&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;exec sp_addTest 2&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;select * From t_test&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cF9BaiSfT80/S1Pa0Ej9_3I/AAAAAAAAABc/aPQTbkXMOX8/s1600-h/1.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 55px; height: 76px;" src="http://3.bp.blogspot.com/_cF9BaiSfT80/S1Pa0Ej9_3I/AAAAAAAAABc/aPQTbkXMOX8/s400/1.bmp" alt="" id="BLOGGER_PHOTO_ID_5427922564024237938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;select * From t_msg&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_cF9BaiSfT80/S1PbipYdBKI/AAAAAAAAABs/0GVqBymlLLI/s1600-h/2.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 19px;" src="http://1.bp.blogspot.com/_cF9BaiSfT80/S1PbipYdBKI/AAAAAAAAABs/0GVqBymlLLI/s400/2.bmp" alt="" id="BLOGGER_PHOTO_ID_5427923364182033570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;the message is "sp_addTest Error : Violation of PRIMARY KEY constraint 'PK__t_test__1CA7377D'. Cannot insert duplicate key in object 'dbo.t_test'.Error in sp_addTest"&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;Happy Code ^_^"&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-8347426041843861072?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/8347426041843861072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2010/01/capture-error-message-on-procedure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/8347426041843861072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/8347426041843861072'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2010/01/capture-error-message-on-procedure.html' title='Capture Error Message on Procedure'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_cF9BaiSfT80/S1Pa0Ej9_3I/AAAAAAAAABc/aPQTbkXMOX8/s72-c/1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-5751308674952822677</id><published>2010-01-10T22:37:00.000-08:00</published><updated>2010-01-10T22:51:24.789-08:00</updated><title type='text'>Exporting data to a XML file in SQL Server 2005</title><content type='html'>&lt;p class="articleheader"&gt;Overview&lt;/p&gt; &lt;p class="stdtext" align="justify"&gt;In this article, I'll demonstrate how we can   combine the new CLR integration and FOR XML enhancements to easily generate   xml files from our relational data. For an introduction to .NET Stored procedures   have a look at &lt;a href="http://www.sqldbatips.com/showarticle.asp?ID=22" target="_blank" class="co"&gt;Introducing   CLR Stored Procedures in SQL Server 2005&lt;/a&gt;. This article will reference the   Orders table in the Northwind database. You can download the Northwind and pubs databases&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&amp;amp;displaylang=en" target="_blank" class="co"&gt; here&lt;/a&gt;. &lt;/p&gt; &lt;p class="articleheader"&gt;.NET Code&lt;/p&gt; &lt;p class="stdtext" align="justify"&gt; The first thing we need to do is write our  .Net  code for our Stored Procedure   and compile it. In this case, we are going to create a procedure that accepts   a filename and some content (using a nvarchar(max) parameter) and simply writes   that content to the specified file.&lt;/p&gt;&lt;microsoft.sqlserver.server.sqlprocedure()&gt;&lt;br /&gt;&lt;pre class="codesample"&gt;[Visual Basic]&lt;br /&gt;&lt;br /&gt;Imports System&lt;br /&gt;Imports System.Data&lt;br /&gt;Imports Microsoft.SqlServer.Server&lt;br /&gt;Imports System.Data.SqlTypes&lt;br /&gt;Imports System.IO&lt;br /&gt;&lt;br /&gt;Public Class SQLCLRIO&lt;br /&gt;  &lt;&gt; _&lt;br /&gt;  Public Shared Sub WriteToFile(ByVal content As String, _&lt;br /&gt;                                ByVal filename As String)&lt;br /&gt;&lt;br /&gt;      Try&lt;br /&gt;         File.WriteAllText(filename, content)&lt;br /&gt;&lt;br /&gt;      Catch ex As Exception&lt;br /&gt;          SqlContext.Pipe.Send("Error writing to file " &amp;amp; ex.Message)&lt;br /&gt;      End Try&lt;br /&gt;&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;[C#]&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Data;&lt;br /&gt;using Microsoft.SqlServer.Server;&lt;br /&gt;using System.Data.SqlTypes;&lt;br /&gt;using System.IO;&lt;br /&gt;&lt;br /&gt;public class SQLCLRIO{&lt;br /&gt;&lt;br /&gt;  [Microsoft.SqlServer.Server.SqlProcedure]&lt;br /&gt;  public static void WriteToFile(String content,String filename)&lt;br /&gt;  {&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;         File.WriteAllText(filename, content);&lt;br /&gt;      }&lt;br /&gt;      catch(Exception ex)&lt;br /&gt;      {&lt;br /&gt;         SqlContext.Pipe.Send("Error writing to file " + ex.Message);&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;p class="stdtext" align="justify"&gt; In order for us to use this code in SQL Server 2005 we must first compile it into an assembly. We can then load it into SQL Server and create our TSQL Stored Procedure wrapper for our .Net code. The command below demonstrates how to compile the code into an assembly. For the purposes of this article we will assume that the code has been saved in a source file called c:\WriteToFile.vb or c:\WriteToFile.cs. To compile this open a command prompt and execute the relavent lines to change to the .NET 2.0 directory and compile the code. &lt;/p&gt; &lt;table class="rParent" width="100%"&gt;   &lt;tbody&gt;&lt;tr&gt;     &lt;td&gt;&lt;pre class="codesample"&gt;[Visual Basic]&lt;br /&gt;cd "%SystemRoot%\Microsoft.NET\Framework\v2.0.50727"&lt;br /&gt;vbc /target:library c:\WriteToFile.vb&lt;br /&gt;&lt;br /&gt;[C#]&lt;br /&gt;cd "%SystemRoot%\Microsoft.NET\Framework\v2.0.50727"&lt;br /&gt;csc /target:library c:\WriteToFile.cs&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p class="articleheader"&gt;TSQL Code&lt;/p&gt; &lt;p class="stdtext" align="justify"&gt; Now that we have created our assembly (c:\WriteToFile.dll) we can load it into SQL Server and create our Stored Procedure. We do this by using the new CREATE ASSEMBLY command as below. We need to specify a permission_set of EXTERNAL_ACCESS because the stored procedure needs to access the file system. We need to ensure that execution of user defined CLR code is enabled using sp_configure and we also need to set the database Trustworthy property ON to allow the loading of the EXTERNAL_ACCESS assembly. &lt;span class="btext"&gt;NOTE   : The external access will be under the security context of the SQL Service account &lt;/span&gt;&lt;/p&gt; &lt;table class="rParent" width="100%"&gt;   &lt;tbody&gt;&lt;tr&gt;     &lt;td&gt;&lt;pre class="codesample"&gt;exec sp_configure 'clr enabled',1&lt;br /&gt;reconfigure&lt;br /&gt;go&lt;br /&gt;alter database Northwind set trustworthy on&lt;br /&gt;go&lt;br /&gt;use Northwind&lt;br /&gt;go&lt;br /&gt;create assembly WriteToFile from 'c:\WriteToFile.dll'&lt;br /&gt;with permission_set = external_access&lt;/pre&gt;  &lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p class="stdtext" align="justify"&gt;Now that we have loaded our assembly, we can   create our Stored Procedure. To do this we simply use the standard TSQL CREATE   PROCEDURE syntax but instead of defining a TSQL procedure body, we specify   an EXTERNAL NAME that points to our .NET Code. We specify the assembly, class   and method name in the form &lt;assemblyname&gt;.&lt;classname&gt;.&lt;methodname&gt; as   shown below.&lt;/methodname&gt;&lt;/classname&gt;&lt;/assemblyname&gt;&lt;/p&gt; &lt;table class="rParent" width="100%"&gt;   &lt;tbody&gt;&lt;tr&gt;     &lt;td&gt;&lt;pre class="codesample"&gt;create procedure dbo.writetofile&lt;br /&gt;(&lt;br /&gt;@content nvarchar(max),&lt;br /&gt;@filename nvarchar(255)&lt;br /&gt;)&lt;br /&gt;as external name WriteToFile.SQLCLRIO.WriteToFile&lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p class="stdtext" align="justify"&gt;Now that the Stored Procedure is created,   we can use it to write our content (in this case xml) to a file. The sample   query will take the entire contents of the Northwind.dbo.Orders table and create   a single, well formed xml document from it which we will then write to a xml   file using the WriteToFile stored procedure. The query takes advantage of the   ability to declare local variables for LOB types such as varchar(max) and nvarchar(max)   - these datatypes supercede the text and ntext datatypes - as well as the new   root directive of the FOR XML clause that allows you to specify a single top   level root element for you xml document, in the code below the top level element   will be &lt;allorders&gt;. This code will create a new file called AllOrders.xml   containing all the order header information from the Northwind database. You   can view the contents of the generated file by simply opening it in your web   browser.&lt;/allorders&gt;&lt;/p&gt;         &lt;pre class="codesample"&gt;declare @xml nvarchar(max)&lt;br /&gt;&lt;br /&gt;set @xml = (&lt;br /&gt;select * from Orders&lt;br /&gt;for xml auto,elements,root('AllOrders'))&lt;br /&gt;&lt;br /&gt;exec writetofile @xml,'c:\AllOrders.xml'&lt;br /&gt;&lt;br /&gt;Source : http://www.sqldbatips.com/showarticle.asp?ID=23&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/microsoft.sqlserver.server.sqlprocedure()&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-5751308674952822677?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/5751308674952822677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2010/01/exporting-data-to-xml-file-in-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/5751308674952822677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/5751308674952822677'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2010/01/exporting-data-to-xml-file-in-sql.html' title='Exporting data to a XML file in SQL Server 2005'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-1055476985663604240</id><published>2009-12-13T20:18:00.000-08:00</published><updated>2009-12-13T20:44:08.826-08:00</updated><title type='text'>Generate System Column ID based on Format Required in SQL</title><content type='html'>If we want to make a generate id column in table which format is 'TR-091214-001' where,&lt;br /&gt;- tr is define transaction&lt;br /&gt;- 091213 is define yymmdd&lt;br /&gt;- 001 is define increment number of transaction each day&lt;br /&gt;&lt;br /&gt;we can make a simple logic and validation for that.&lt;br /&gt;&lt;br /&gt;here the steps :&lt;br /&gt;&lt;br /&gt;-- step 1 create table&lt;br /&gt;create table testgenid&lt;br /&gt;(&lt;br /&gt;tr_id varchar(30) not null,&lt;br /&gt;primary key(tr_id)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;-- step 2 generate id&lt;br /&gt;declare @gen_id varchar(30)&lt;br /&gt;set @gen_id = (&lt;br /&gt;select 'TR-'+ right(convert(varchar,getdate(),112),6) + '-' + right('00' + cast((cast(right(isnull(max(tr_id),'000'),3) as int) + 1) as varchar),3)&lt;br /&gt;from testgenid&lt;br /&gt;where tr_id like '%' + right(convert(varchar,getdate(),112),6) + '%')&lt;br /&gt;&lt;br /&gt;print @gen_id&lt;br /&gt;&lt;br /&gt;insert into testgenid values(@gen_id)&lt;br /&gt;&lt;br /&gt;-- step 3 see the result&lt;br /&gt;select * From testgenid&lt;br /&gt;&lt;br /&gt;the result is : TR-091214-001&lt;br /&gt;&lt;br /&gt;happy coding ^^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-1055476985663604240?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/1055476985663604240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/12/generate-system-column-id-based-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/1055476985663604240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/1055476985663604240'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/12/generate-system-column-id-based-on.html' title='Generate System Column ID based on Format Required in SQL'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-8966325744998241360</id><published>2009-11-25T04:03:00.000-08:00</published><updated>2009-11-25T04:06:56.049-08:00</updated><title type='text'>Data Dictionary Using Query SQL</title><content type='html'>When we want to summarize all the tables on database from SQL we need the query to make it simple and fast... here the query :&lt;br /&gt;&lt;br /&gt;select distinct b.name, a.name, c.name, a.max_length,c.precision, c.scale&lt;br /&gt;from sys.columns a left join sys.objects b&lt;br /&gt; on a.object_id = b.object_id&lt;br /&gt;left join sys.types c&lt;br /&gt; on c.system_type_id = a.system_type_id&lt;br /&gt; and c.user_type_id = a.user_type_id&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Having A Nice Try… ^^&lt;/p&gt; &lt;p&gt;Good Luck&lt;/p&gt;&lt;input id="gwProxy" type="hidden"&gt;&lt;!--Session data--&gt;&lt;input onclick="jsCall();" id="jsProxy" type="hidden"&gt;&lt;div id="refHTML"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-8966325744998241360?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/8966325744998241360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/11/data-dictionary-using-query-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/8966325744998241360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/8966325744998241360'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/11/data-dictionary-using-query-sql.html' title='Data Dictionary Using Query SQL'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-2203150322632133342</id><published>2009-11-16T20:23:00.000-08:00</published><updated>2009-11-16T20:38:42.709-08:00</updated><title type='text'>Row Number Function in SQL 2005</title><content type='html'>A new function in sql server 2005. It's function returns the sequential number of a row within a partition of a result set, starting at 1 for the first row in each partition.&lt;br /&gt;&lt;br /&gt;Syntax :&lt;br /&gt;&lt;br /&gt;ROW_NUMBER ( ) OVER ( [] )&lt;br /&gt;&lt;br /&gt;Example :&lt;br /&gt;&lt;br /&gt;create table Testing ( Kd varchar(10) not null, Name varchar(10) )&lt;br /&gt;&lt;br /&gt;insert into Testing values('K01','Siji')&lt;br /&gt;insert into Testing values('K02','Loro')&lt;br /&gt;insert into Testing values('K03','Telu')&lt;br /&gt;insert into Testing values('K04','Opat')&lt;br /&gt;&lt;br /&gt;select ROW_NUMBER() OVER(ORDER BY Kd) AS 'No.' , Kd , Name from Testing&lt;br /&gt;&lt;br /&gt;Output :&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5404926845664327730" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 140px; CURSOR: hand; HEIGHT: 99px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_cF9BaiSfT80/SwIoVGDLeDI/AAAAAAAAABQ/A84yQKH30qc/s400/asc.bmp" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Easy Right!!!&lt;/div&gt;&lt;div&gt;Happy Code \^_^/&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-2203150322632133342?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/2203150322632133342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/11/row-number-function-in-sql-2005.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/2203150322632133342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/2203150322632133342'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/11/row-number-function-in-sql-2005.html' title='Row Number Function in SQL 2005'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_cF9BaiSfT80/SwIoVGDLeDI/AAAAAAAAABQ/A84yQKH30qc/s72-c/asc.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-4257782039275245504</id><published>2009-07-03T00:41:00.001-07:00</published><updated>2009-07-03T00:47:29.834-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='syscomments'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='sys.objects'/><title type='text'>Find Text In SQL Server</title><content type='html'>Sometimes we want to check &lt;strong&gt;where the certain text could appear on the store procedure or trigger&lt;/strong&gt; we made... Here is the query provide to maximize the searching :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;declare @text varchar(max)&lt;br /&gt;set @text = 'Wihemdra'&lt;br /&gt;&lt;br /&gt;select name from sys.objects&lt;br /&gt;where object_id in&lt;br /&gt;(&lt;br /&gt;  select id from syscomments&lt;br /&gt;  where text like '%'+@text+'%'&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Wihemdra&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-4257782039275245504?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/4257782039275245504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/07/find-text-in-sql-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/4257782039275245504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/4257782039275245504'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/07/find-text-in-sql-server.html' title='Find Text In SQL Server'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-6456759492741242118</id><published>2009-07-02T02:36:00.000-07:00</published><updated>2009-07-02T02:53:08.744-07:00</updated><title type='text'>Example Duwamish Architecture with ASP.NET C#</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_cF9BaiSfT80/SkyBYLUPm6I/AAAAAAAAAA4/d-SD5zGrTa4/s1600-h/Layer+Duwamish.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5353796309391219618" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_cF9BaiSfT80/SkyBYLUPm6I/AAAAAAAAAA4/d-SD5zGrTa4/s400/Layer+Duwamish.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Above is the screen capture for duwamish layer template. &lt;/div&gt;&lt;div&gt;&lt;br /&gt; &lt;/div&gt;&lt;div&gt;The Duwamish 7.0 architecture is divided into four logical layers:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Web Layer&lt;br /&gt;&lt;/strong&gt;The Web layer provides access for clients to the application. This layer is implemented as the Web project in the Duwamish.sln solution file. The Web layer consists of ASP.NET Web Forms and code-behind files. The Web Forms simply provide the user experience in HTML, while the code-behind files implement event handling for the various controls.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Business Facade Layer&lt;/strong&gt;&lt;br /&gt;The Business Facade layer provides interfaces to the Web layer to handle accounts, category browsing, and book purchasing. This layer is implemented as the BusinessFacade project in the Duwamish.sln solution file. The Business Facade layer serves as an isolation layer, segregating the user interface from the implementation of the various business functions. Apart from low-level system and support functions, all calls to database servers are made through this assembly.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Business Rules Layer&lt;br /&gt;&lt;/strong&gt;The Business Rules layer, which is implemented as the BusinessRules project in the Duwamish.sln solution file, contains the implementation of the various business rules and logic. Business rules do tasks such as the validation of customer accounts and book orders.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Data Access Layer&lt;br /&gt;&lt;/strong&gt;The Data Access layer provides data services to the Business Rules layer. This layer is implemented as the DataAccess project in the Duwamish.sln solution file. &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a href="http://www.4shared.com/file/115497212/a2cb07b7/WebSite1.html"&gt;Download Template&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Reference :&lt;/div&gt;&lt;div&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa288541(VS.71).aspx"&gt;MSDN&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-6456759492741242118?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/6456759492741242118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/07/example-duwamish-architecture-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/6456759492741242118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/6456759492741242118'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/07/example-duwamish-architecture-with.html' title='Example Duwamish Architecture with ASP.NET C#'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_cF9BaiSfT80/SkyBYLUPm6I/AAAAAAAAAA4/d-SD5zGrTa4/s72-c/Layer+Duwamish.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-12868598898685494</id><published>2009-06-04T21:09:00.000-07:00</published><updated>2009-06-04T21:31:16.112-07:00</updated><title type='text'>Design Dynamic Structure Table</title><content type='html'>Design table for meet the requirement is not so simple. Sometimes rule and process of business change rapidly. We must predict the future before we start to create the table. The table structure we made could impact anywhere which related it. As you could see the logic for application , reports, calculation, batch, etc depend on the design of the table. Sometimes we think the table is unpowerfull or too much field unrequired... &lt;br /&gt;&lt;br /&gt;One example to handle this requirement for current and future development :&lt;br /&gt;&lt;br /&gt;The requirement is : every product have own rate accumulated per year, and not every year is at the same rate but we assumed that the maximum rate until 100 years or less. So the simulation is like this :&lt;br /&gt;&lt;br /&gt;--bad design table&lt;br /&gt;--take too much columns&lt;br /&gt;create table mst_rate_product&lt;br /&gt;(&lt;br /&gt; code_product nvarchar(20) not null,&lt;br /&gt; rate_year01 decimal(10,4),&lt;br /&gt; rate_year02 decimal(10,4),&lt;br /&gt; rate_year03 decimal(10,4),&lt;br /&gt; rate_year04 decimal(10,4),&lt;br /&gt; rate_year05 decimal(10,4),&lt;br /&gt; rate_year06 decimal(10,4),&lt;br /&gt; rate_year07 decimal(10,4),&lt;br /&gt; rate_year08 decimal(10,4),&lt;br /&gt; rate_year09 decimal(10,4),&lt;br /&gt; rate_year10 decimal(10,4),&lt;br /&gt; --...&lt;br /&gt; rate_year100 decimal(10,4)&lt;br /&gt; primary key (code_product)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;--recommended design table structured&lt;br /&gt;--powerfull on data requirements and saving data&lt;br /&gt;create table mst_rate_product_recommended&lt;br /&gt;(&lt;br /&gt; code_product nvarchar(20) not null,&lt;br /&gt; year int,&lt;br /&gt; rate decimal(10,4),&lt;br /&gt; primary key (code_product) &lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;We don't have to affraid to make a complicated report by logic because sql server 2005 have pivot table to make a report based on column(if needed) not by rows.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Wihemdra&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-12868598898685494?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/12868598898685494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/06/design-dynamic-structure-table.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/12868598898685494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/12868598898685494'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/06/design-dynamic-structure-table.html' title='Design Dynamic Structure Table'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-8457656724975230757</id><published>2009-05-28T18:12:00.000-07:00</published><updated>2009-05-28T19:00:58.455-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Begin Tran'/><category scheme='http://www.blogger.com/atom/ns#' term='RollBack Tran'/><category scheme='http://www.blogger.com/atom/ns#' term='Commit Tran'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><title type='text'>Using Begin Tran, Rollback Tran and Commit Tran on SQL Server</title><content type='html'>Sometimes, we're using too much windows document in sql server.&lt;br /&gt;To prevent the mass Execute query on one window we didn't want, better we use query "begin tran" in every windows document. &lt;br /&gt;So, if we're executing the windows document by accident, we could rollback all the transaction we made ^^". &lt;br /&gt;&lt;br /&gt;-----------------------------Assumed this is the windows document used&lt;br /&gt;Begin Tran&lt;br /&gt;&lt;br /&gt;select * from nametable&lt;br /&gt;&lt;br /&gt;insert into nametable values('string value')&lt;br /&gt;insert into nametable values('string value')&lt;br /&gt;insert into nametable values('string value')&lt;br /&gt;insert into nametable values('string value')&lt;br /&gt;insert into nametable values('string value')&lt;br /&gt;insert into nametable values('string value')&lt;br /&gt;&lt;br /&gt;update nametable&lt;br /&gt;set namecolumn = 'asdf'&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;When we Execute execute for the second time, but we want to cancel it. Just use rollback tran. But otherwise use commit tran&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Wihemdra&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-8457656724975230757?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/8457656724975230757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/using-begin-tran-rollback-tran-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/8457656724975230757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/8457656724975230757'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/using-begin-tran-rollback-tran-and.html' title='Using Begin Tran, Rollback Tran and Commit Tran on SQL Server'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-5731311998433889355</id><published>2009-05-27T05:23:00.000-07:00</published><updated>2009-05-27T05:38:04.970-07:00</updated><title type='text'>varchar(max) in sql server 2005</title><content type='html'>Varchar(max) is one of the new type data of sql server 2005. &lt;br /&gt;&lt;br /&gt;Usually we use it when we didn't know the maximum length of string or we couldn't expect how long the string is. &lt;br /&gt;&lt;br /&gt;As you know the length of varchar(max) is -1. We'll see when we're using ALT+F1 at table name. Or we could using this query to figure it out :&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;drop table test1&lt;br /&gt;&lt;br /&gt;create table test1&lt;br /&gt;(&lt;br /&gt; strMax varchar(max)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;select distinct b.name, a.name, c.name, a.max_length,c.precision, c.scale&lt;br /&gt;from &lt;br /&gt;sys.columns a left join sys.objects b&lt;br /&gt; on a.object_id = b.object_id&lt;br /&gt;left join sys.types c&lt;br /&gt; on c.system_type_id = a.system_type_id&lt;br /&gt; and c.user_type_id = a.user_type_id&lt;br /&gt;where b.name = 'test1'&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Here the results :&lt;br /&gt;&lt;br /&gt;name name name max_length precision scale&lt;br /&gt;test1 strMax varchar -1         0         0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;&lt;br /&gt;Wihemdra&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-5731311998433889355?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/5731311998433889355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/varcharmax-in-sql-server-2005.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/5731311998433889355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/5731311998433889355'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/varcharmax-in-sql-server-2005.html' title='varchar(max) in sql server 2005'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-3223495698323721227</id><published>2009-05-26T01:47:00.000-07:00</published><updated>2009-05-26T04:14:52.306-07:00</updated><title type='text'>String or binary data would be truncated. Error Message @ SQL</title><content type='html'>Error Message:&lt;br /&gt;Msg 8152, Level 16, State 14, Line 5&lt;br /&gt;String or binary data would be truncated.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Severity level:&lt;br /&gt;&lt;/strong&gt;16.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;br /&gt;This error message appears when you try to insert a string with more characters than the&lt;br /&gt;&lt;br /&gt;column can maximal accommodate.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Consequences:&lt;/strong&gt;&lt;br /&gt;The T-SQL statement can be parsed, but causes the error at runtime.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Resolution:&lt;/strong&gt;&lt;br /&gt;Errors of the Severity Level 16 are generated by the user and are corrigible by the user.&lt;br /&gt;&lt;br /&gt;The statement cannot be executed this way. You must either shorten the string to be isnerted&lt;br /&gt;&lt;br /&gt;to widen the column.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Versions:&lt;/strong&gt;&lt;br /&gt;All versions of SQL Server.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Example(s):&lt;/strong&gt;&lt;br /&gt;USE tempdb;&lt;br /&gt;IF OBJECT_ID('tempdb.#t') &gt; 0&lt;br /&gt;DROP TABLE #t&lt;br /&gt;GO&lt;br /&gt;CREATE TABLE #t&lt;br /&gt;(&lt;br /&gt;c1 CHAR&lt;br /&gt;);&lt;br /&gt;INSERT INTO #t SELECT 'abc'&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;br /&gt;In the above example we try to insert a string 'abc' with a length of 3 into the column c1 of the table #t. Because c1 is of the data type CHAR(1), the error is raised.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-3223495698323721227?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/3223495698323721227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/string-or-binary-data-would-be.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/3223495698323721227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/3223495698323721227'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/string-or-binary-data-would-be.html' title='String or binary data would be truncated. Error Message @ SQL'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-923516621427826175</id><published>2009-05-24T23:54:00.000-07:00</published><updated>2009-05-25T03:47:26.248-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Set'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='Connection String'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>String Connection To Upload Data From Excel To SQL Using ASP.NET VB</title><content type='html'>Sometimes we would like to upload mass data from excel to SQL 2005.&lt;br /&gt;Here the connection string :&lt;br /&gt;&lt;br /&gt;Dim FileLocation As String = "D:\Wihemdra\Book1.xls"&lt;br /&gt;&lt;br /&gt;' Create connection string variable. Modify the "Data Source" parameter as' appropriate for your environment.&lt;br /&gt;&lt;br /&gt;Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" &amp;amp; _"Data Source=" &amp;amp; FileLocation &amp;amp; ";" &amp;amp; _"Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""&lt;br /&gt;&lt;br /&gt;' Create the connection object by using the preceding connection string.&lt;br /&gt;Dim objConn As New OleDbConnection(sConnectionString)&lt;br /&gt;&lt;br /&gt;' Open connection with the database.&lt;br /&gt;objConn.Open()&lt;br /&gt;&lt;br /&gt;' The code to follow uses a SQL SELECT command to display the data from the worksheet.&lt;br /&gt;' Create new OleDbCommand to return data from worksheet.&lt;br /&gt;Dim objCmdSelect As New OleDbCommand("SELECT * FROM [Sheet1$]", objConn)&lt;br /&gt;&lt;br /&gt;' Create new OleDbDataAdapter that is used to build a DataSet' based on the preceding SQL SELECT statement.&lt;br /&gt;Dim objAdapter1 As New OleDbDataAdapter()&lt;br /&gt;&lt;br /&gt;' Pass the Select command to the adapter.&lt;br /&gt;objAdapter1.SelectCommand = objCmdSelect&lt;br /&gt;&lt;br /&gt;' Create new DataSet to hold information from the worksheet.&lt;br /&gt;Dim objDataset1 As New Data.DataSet()&lt;br /&gt;&lt;br /&gt;' Fill the DataSet with the information from the worksheet.&lt;br /&gt;objAdapter1.Fill(objDataset1, "XLData")&lt;br /&gt;&lt;br /&gt;' Clean up objects.&lt;br /&gt;objConn.Close()&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-923516621427826175?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/923516621427826175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/string-connection-to-upload-data-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/923516621427826175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/923516621427826175'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/string-connection-to-upload-data-from.html' title='String Connection To Upload Data From Excel To SQL Using ASP.NET VB'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7918513662268022288.post-6213291355326019827</id><published>2009-05-23T23:06:00.000-07:00</published><updated>2009-05-24T02:14:48.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Query Options'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Make excel report from query option of SQL Server 2005</title><content type='html'>Sometimes we want to check data from our database or make temporary report using excel format.&lt;br /&gt;Here the step to resolve your problem.&lt;br /&gt;It is faster way to copy data from sql to excel.&lt;br /&gt;I'm using Query options facility.&lt;br /&gt;&lt;br /&gt;Please Follow this instruction :&lt;br /&gt;&lt;br /&gt;1. Make a short sample query. Example :&lt;br /&gt;&lt;br /&gt;USE [AdventureWorks]&lt;br /&gt;Go&lt;br /&gt;&lt;br /&gt;select * from HumanResources.Department&lt;br /&gt;&lt;br /&gt;2. Choose the file option like this :&lt;br /&gt;&lt;br /&gt;Query -&gt; Query Options&lt;br /&gt;Text -&gt; Output format : Tab delimited&lt;br /&gt;OK&lt;br /&gt;&lt;br /&gt;3. Choose "Results to Text" (in toolbars)&lt;br /&gt;&lt;br /&gt;4. Press F5&lt;br /&gt;&lt;br /&gt;5. Drag / "Copy and Paste" the results from sql to Excel.&lt;br /&gt;&lt;br /&gt;See what happen. It's cool right... ^^"&lt;br /&gt;&lt;br /&gt;Best Regards,&lt;br /&gt;&lt;br /&gt;Wihemdra&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7918513662268022288-6213291355326019827?l=tt-programmer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tt-programmer.blogspot.com/feeds/6213291355326019827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/make-excel-report-from-query-option-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/6213291355326019827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7918513662268022288/posts/default/6213291355326019827'/><link rel='alternate' type='text/html' href='http://tt-programmer.blogspot.com/2009/05/make-excel-report-from-query-option-of.html' title='Make excel report from query option of SQL Server 2005'/><author><name>Wihemdra</name><uri>http://www.blogger.com/profile/10125515564567476665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='20' height='32' src='http://4.bp.blogspot.com/_cF9BaiSfT80/ShjfJRC04UI/AAAAAAAAAAM/m9wuwWI_VBU/S220/n529742163_1517900_4766354.jpg'/></author><thr:total>0</thr:total></entry></feed>
