Listing 1

sqlPrimaryKeys =	"SELECT " + 
	"kcu.constraint_name, kcu.table_name, " +
	"kcu.column_name " +
	"FROM " +		
	"INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU " + "INNER JOIN " +
	"INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC " +
	"ON TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME " + "WHERE " + 
	"TC.CONSTRAINT_TYPE = 'PRIMARY KEY' " +
	"AND OBJECTPROPERTY(OBJECT_ID(KCU.TABLE_NAME)"+ ",'IsMSShipped')=0";

Listing 2

DataSet dsTrigger = new DataSet("Triggers");

SqlDataAdapter da = new SqlDataAdapter(sqlAllTables, con);

da.Fill(dsTrigger, "AllTables");

da.SelectCommand.CommandText = sqlPrimaryKeys;

da.Fill(dsTrigger, "PrimaryKeys");

DataTable dtTables = dsTrigger.Tables["AllTables"];
DataTable dtKeys = dsTrigger.Tables["PrimaryKeys"];

Listing 3

foreach (DataRow parentrow in dtTables.Rows)
{
	sqlWhere = "";
	tableName = parentRow["Table_name"].ToString();

	sqlDropTriggers = "DROP TRIGGER trg_insert_" + tableName + 
	Environment.NewLine + 
	"DROP TRIGGER trg_update_" + tableName + 
	Environment.NewLine;

	sqlInsert = "CREATE TRIGGER trg_insert_" + tableName +  
			" ON [dbo].[" + tableName + "]" +
			" FOR INSERT " +
			" AS " + 
			" UPDATE " + tableName + 
			" set DateCreated=GetDate(), DateModified=GetDate()"+
			" WHERE ";

	sqlUpdate = "CREATE TRIGGER trg_update_" + tableName +  
			" ON [dbo].[" + tableName + "]" +
			" FOR UPDATE " +
			" AS " + 
			" UPDATE " + tableName + 
			" set DateModified=GetDate() " +
			" WHERE ";
			
	foreach (DataRow childRow in 
	parentRow.GetChildRows("Tables_Keys"))
	{
		sqlWhere += tableName + "." + 
		childRow["column_name"].ToString() +  " = " + 
		"(select " + childRow["column_name"].ToString()
		+  " from inserted) and ";

	}

	sqlWhere = sqlWhere.Substring(0, sqlWhere.Length - 4);

	sqlInsert += sqlWhere;
	sqlUpdate += sqlUpdate;

	tbOutput.Text = tbOutput.Text + sqlDropTriggers + 
	Environment.NewLine + "GO" + 
	Environment.NewLine +
	sqlInsert + Environment.NewLine + "GO" + 
	Environment.NewLine + sqlUpdate + Environment.NewLine 
	+ "GO" + Environment.NewLine;

	}

Additional Code for this Article zip file ~(5.75 KB)