<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Frankie Yuen : Share my experience</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/frankie_yuen/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/frankie_yuen/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:41:47 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>SQL Server 2008 R2 - Data Level Audit Sample (Change Data Capture)</title>
      <link>https://docs.microsoft.com/archive/blogs/frankie_yuen/sql-server-2008-r2-data-level-audit-sample-change-data-capture</link>
      <pubDate>Tue, 21 Feb 2012 17:50:58 GMT</pubDate>
      <dc:creator><![CDATA[Frankie Yuen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/frankie_yuen/2012/02/21/sql-server-2008-r2-data-level-audit-sample-change-data-capture/</guid>
      <description><![CDATA[CREATE DATABASE SQL2008CDCGO
USE SQL2008CDCGO
EXEC sp_changedbowner 'sa'GO
EXEC...]]></description>
      <content:encoded><![CDATA[<p>CREATE DATABASE SQL2008CDC<br />GO</p>
<p>USE SQL2008CDC<br />GO</p>
<p>EXEC sp_changedbowner 'sa'<br />GO</p>
<p>EXEC sp_cdc_enable_db<br />GO</p>
<p>SELECT [name] AS DBName,is_cdc_enabled FROM sys.databases</p>
<p>CREATE TABLE dbo.Employee<br />(<br />EmpID int Primary Key NOT NULL,<br />EmpName nvarchar(100) NOT NULL,<br />EmpEmail nvarchar(100) NOT NULL<br />)</p>
<p>EXEC sp_cdc_enable_table 'dbo', 'Employee', @role_name = NULL, @supports_net_changes =1<br />GO</p>
<p>select [name], is_tracked_by_cdc from sys.tables<br />GO</p>
<p>INSERT INTO dbo.Employee<br />VALUES (1, N'John Wills', <a href="mailto:N'jw@contoso.com'">N'jw@contoso.com'</a>)<br />GO</p>
<p>UPDATE dbo.Employee SET EmpName = N'Don Miles' WHERE EmpID = 1<br />GO</p>
<p>SELECT * FROM cdc.dbo_Employee_CT<br />-- 1 : Delete<br />-- 2 : Insert<br />-- 3 : Before Update<br />-- 4 : After Update</p>
<p>-- Net Changes<br />DECLARE @from_lsn binary(10), @to_lsn binary(10);<br />SET @from_lsn = sys.fn_cdc_get_min_lsn('dbo_employee');<br />SET @to_lsn = sys.fn_cdc_get_max_lsn();<br />SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_employee(@from_lsn, @to_lsn, 'all')</p>
<p><span style="text-decoration: underline;"></span>&nbsp;</p>
<p><span style="text-decoration: underline;">REFERENCE:</span></p>
<ul>
<li>Tracking Data Changes: <span style="text-decoration: underline;"><a href="https://msdn.microsoft.com/en-us/library/bb933994.aspx">https://msdn.microsoft.com/en-us/library/bb933994.aspx</a></span></li>
</ul>
<p><span style="text-decoration: underline;"></span></p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server 2008 R2 - Power User Audit Sample (DDL Trigger)</title>
      <link>https://docs.microsoft.com/archive/blogs/frankie_yuen/sql-server-2008-r2-power-user-audit-sample-ddl-trigger</link>
      <pubDate>Tue, 21 Feb 2012 17:46:00 GMT</pubDate>
      <dc:creator><![CDATA[Frankie Yuen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/frankie_yuen/2012/02/21/sql-server-2008-r2-power-user-audit-sample-ddl-trigger/</guid>
      <description><![CDATA[-- Create a databaseCREATE DATABASE DDLTriggerGO
USE DDLTriggerGO
-- Create a table to hold...]]></description>
      <content:encoded><![CDATA[<p>-- Create a database<br />CREATE DATABASE DDLTrigger<br />GO</p>
<p>USE DDLTrigger<br />GO</p>
<p>-- Create a table to hold results<br />CREATE TABLE info_ddl (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100))<br />GO</p>
<p>-- Now create a Trigger<br />CREATE TRIGGER ddl_test <br />ON DATABASE <br />FOR DDL_DATABASE_LEVEL_EVENTS <br />AS<br />INSERT info_ddl<br />&nbsp;(PostTime, DB_User, Event)&nbsp;&nbsp;&nbsp; <br />&nbsp;VALUES&nbsp;&nbsp;&nbsp; <br />&nbsp;(GETDATE(), CONVERT(nvarchar(100), CURRENT_USER),<br />&nbsp;EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'))<br />GO</p>
<p>-- Create a table in Database<br />CREATE TABLE TestDDlTrigger (a int,b int,c int)<br />GO</p>
<p>-- Create procedure in Database<br />CREATE PROCEDURE spTest<br />AS<br />SELECT * FROM sys.all_objects<br />GO</p>
<p>-- Check our table which holds the data<br />SELECT * FROM info_ddl<br />GO</p>
<p>-- Now we drop the table and procedure from Database<br />DROP TABLE TestDDlTrigger;<br />GO</p>
<p>DROP PROCEDURE spTest<br />GO</p>
<p>-- Again check the audit data <br />SELECT * FROM info_ddl<br />GO</p>
<p>-- Adding additional column to table to store T-SQL<br />ALTER TABLE info_ddl ADD TSQL VARCHAR(2000)<br />GO</p>
<p>-- Recreate the&nbsp;DDL Trigger<br />DROP TRIGGER ddl_test<br />ON DATABASE<br />GO</p>
<p>CREATE TRIGGER ddl_test <br />ON DATABASE <br />FOR DDL_DATABASE_LEVEL_EVENTS <br />AS<br />INSERT info_ddl&nbsp;&nbsp;&nbsp; <br />&nbsp;(PostTime, DB_User, Event, TSQL)<br />&nbsp;VALUES<br />&nbsp;(GETDATE(), CONVERT(nvarchar(100), CURRENT_USER),<br />&nbsp;EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),<br />&nbsp;EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)'))<br />GO</p>
<p>-- Create a table in Database<br />CREATE TABLE TestDDlTrigger (a int,b int,c int)<br />GO</p>
<p>-- Create procedure in Database<br />CREATE PROCEDURE spTest<br />AS<br />SELECT * FROM sys.all_objects<br />GO</p>
<p>-- Check our table which holds the data<br />SELECT * FROM info_ddl<br />GO</p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;">REFERENCES:</span></p>
<ul>
<li>Designing DDL Triggers: <a href="https://msdn.microsoft.com/en-us/library/ms186406.aspx">https://msdn.microsoft.com/en-us/library/ms186406.aspx</a></li>
<li>DDL Events: <a href="https://msdn.microsoft.com/en-us/library/bb522542.aspx">https://msdn.microsoft.com/en-us/library/bb522542.aspx</a></li>
</ul>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server 2008 R2 - User Action Audit Sample</title>
      <link>https://docs.microsoft.com/archive/blogs/frankie_yuen/sql-server-2008-r2-user-action-audit-sample</link>
      <pubDate>Tue, 21 Feb 2012 17:38:00 GMT</pubDate>
      <dc:creator><![CDATA[Frankie Yuen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/frankie_yuen/2012/02/21/sql-server-2008-r2-user-action-audit-sample/</guid>
      <description><![CDATA[-- Create Server AuditUSE masterGO
-- Create Server Audit on FileCREATE SERVER AUDIT...]]></description>
      <content:encoded><![CDATA[<p>-- Create Server Audit<br />USE master<br />GO</p>
<p>-- Create Server Audit on File<br />CREATE SERVER AUDIT AdventureWorks_Audit<br />&nbsp;&nbsp;&nbsp; TO FILE ( FILEPATH ='\\myComputer\shares' , MAXSIZE=2MB, MAX_ROLLOVER_FILES=10 )<br />GO</p>
<p>ALTER SERVER AUDIT AdventureWorks_Audit <br />WITH (STATE = ON) ;<br />GO</p>
<p>-- Move to the target database<br />USE AdventureWorks<br />GO</p>
<p>-- Create the database audit specification<br />CREATE DATABASE AUDIT SPECIFICATION AllActionAudit_Pay_Table<br />FOR SERVER AUDIT AdventureWorks_Audit <br />ADD (SELECT, INSERT<br />&nbsp;&nbsp;&nbsp;&nbsp; ON HumanResources.EmployeePayHistory BY dbo )<br />WITH (STATE = ON)<br />GO</p>
<p>-- Create some actions and verify the audit log file<br />SELECT * FROM HumanResources.EmployeePayHistory<br />GO</p>
<p>INSERT INTO HumanResources.EmployeePayHistory<br />VALUES (291, '2009-09-01', 50, 2, GETDATE())<br />Go</p>
<p>SELECT * FROM HumanResources.EmployeePayHistory<br />WHERE EmployeeID = 291<br />GO</p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;">REFERENCE:</span></p>
<ul>
<li>CREATE SERVER AUDIT (Transact-SQL): <a href="https://msdn.microsoft.com/en-us/library/cc280448.aspx">https://msdn.microsoft.com/en-us/library/cc280448.aspx</a></li>
</ul>
<p><br />&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>PowerPivot - A sample of custom Median &amp; Mode function</title>
      <link>https://docs.microsoft.com/archive/blogs/frankie_yuen/powerpivot-a-sample-of-custom-median-mode-function</link>
      <pubDate>Tue, 17 Aug 2010 20:41:00 GMT</pubDate>
      <dc:creator><![CDATA[Frankie Yuen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/frankie_yuen/2010/08/17/powerpivot-a-sample-of-custom-median-mode-function/</guid>
      <description><![CDATA[Please note the performance is not optimized for a very large dataset, try with your own...]]></description>
      <content:encoded><![CDATA[<p><span style="font-size: small;">Please note the performance is not optimized for a very large dataset, try with your own data.</span></p>
<h1><span style="font-size: large;">Create a Median Meausre</span></h1>
<p style="padding-left: 30px;">[Lowerbound]&nbsp;=MINX( FILTER( VALUES( BoxOffice[TicketsSold]), CALCULATE( COUNTROWS( BoxOffice ), BoxOffice[TicketsSold] &lt;= EARLIER( BoxOffice[TicketsSold] ) )&nbsp; &gt;= COUNTROWS( BoxOffice ) / 2 ), BoxOffice[TicketsSold])</p>
<p style="padding-left: 30px;">[Upperbound]=MINX( FILTER( VALUES( BoxOffice[TicketsSold]), CALCULATE( COUNTROWS( BoxOffice ), BoxOffice[TicketsSold] &lt;= EARLIER( BoxOffice[TicketsSold] ) )&nbsp;&nbsp;&gt; COUNTROWS( BoxOffice ) / 2 ), BoxOffice[TicketsSold])</p>
<p style="padding-left: 30px;">[Median TicketsSold] = ([Lowerbound]+ [Upperbound]) / 2</p>
<p style="padding-left: 30px;"><br />*BoxOffice: A PowerPivot Table<br />*TicketsSold: The column that you want to calculate the median in BoxOffice</p>
<h1><span style="font-size: large;">Create a Mode Measure</span></h1>
<p style="padding-left: 30px;">[ModeCount] =IF(COUNTROWS(VALUES(BoxOffice[MediaId]))=1, COUNTROWS(FILTER(ALL(BoxOffice), BoxOffice[MediaId]=VALUES(BoxOffice[MediaId]))), BLANK() )</p>
<p style="padding-left: 30px;">[Mode MediaId] = MINX(FILTER(ALL(BoxOffice[MediaId]),[ModeCount]=MAXX(All(BoxOffice),[ModeCount])),BoxOffice[MediaId])<br /><br />*BoxOffice: A PowerPivot Table<br />*MediaId: The column that you want to calculate the mode in BoxOffice</p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server 2008 Cluster on a Windows Server 2008 Cluster</title>
      <link>https://docs.microsoft.com/archive/blogs/frankie_yuen/sql-server-2008-cluster-on-a-windows-server-2008-cluster</link>
      <pubDate>Tue, 17 Mar 2009 22:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Frankie Yuen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/frankie_yuen/2009/03/17/sql-server-2008-cluster-on-a-windows-server-2008-cluster/</guid>
      <description><![CDATA[Here is a&nbsp;good step-by-step guide about how to setup SQL Server 2008 Cluster on a Windows...]]></description>
      <content:encoded><![CDATA[<P>Here is a&nbsp;good step-by-step guide about how to setup SQL Server 2008 Cluster on a Windows Server 2008 Cluster that I have recently read about.</P>
<P>Thanks to <A href="https://www.mssqltips.com/author.asp?authorid=18" target=_blank mce_href="https://www.mssqltips.com/author.asp?authorid=18">Edwin Sarmiento</A>&nbsp;to provide such a complete documentation.</P>
<P><A href="https://www.mssqltips.com/tip.asp?tip=1687" mce_href="https://www.mssqltips.com/tip.asp?tip=1687">Installing SQL Server 2008 on a Windows Server 2008 Cluster Part 1</A></P>
<P><A href="https://www.mssqltips.com/tip.asp?tip=1698" mce_href="https://www.mssqltips.com/tip.asp?tip=1698">Installing SQL Server 2008 on a Windows Server 2008 Cluster Part 2</A></P>
<P><A href="https://www.mssqltips.com/tip.asp?tip=1709" mce_href="https://www.mssqltips.com/tip.asp?tip=1709">Installing SQL Server 2008 on a Windows Server 2008 Cluster Part 3</A></P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
  </channel>
</rss>