Q:

Trigger is not working in SQL Server 2012 on runtime?

In SQL Server 2012, 

I create two tables TABLE1 and TABLE2
After that, I created a trigger for TABLE1
Trigger name: PUSH_TABLE2
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [dbo].[PUSH_TABLE2]
    ON [dbo].[TABLE1]
    AFTER INSERT
AS
BEGIN
    DECLARE @col1 VARCHAR(20), @col2 VARCHAR(20), @col3 VARCHAR(20)
    SELECT @col1=column1, @col2=column2, @col3=column3 FROM INSERTED

    SET NOCOUNT ON;

    INSERT INTO [dbo].[TABLE2] VALUES (@col1, @col2, @col3);

END

After creating the trigger PUSH_TABLE2, I test with below insert query manually on TABLE1, triggers works perfectly and its populate the data to both TABLE1 and TABLE2.
INSERT INTO TABLE1 VALUES('session1', 'value1', 'type1');

(1) rows affected.

(1) rows affected.

The problem is if the data is populated through application, it will only populate the data to TABLE1 only, seems trigger is not working. Is it because of my trigger script problem?

A:

The problem is that your trigger only handles single-row inserts. That was as true in SQL Server 2008 as it is in SQL Server 2012.
Given two tables:
CREATE TABLE dbo.Table1
(
    col1 varchar(20) NULL,
    col2 varchar(20) NULL,
    col3 varchar(20) NULL
);

CREATE TABLE dbo.Table2
(
    col1 varchar(20) NULL,
    col2 varchar(20) NULL,
    col3 varchar(20) NULL
);

A trigger that handles multi-row inserts is:
CREATE TRIGGER dbo.PushTable2
ON dbo.Table1
AFTER INSERT
AS
BEGIN
    SET ROWCOUNT 0;
    SET NOCOUNT ON;

    IF EXISTS (SELECT * FROM Inserted)
    BEGIN
        INSERT dbo.Table2
        (
            col1, 
            col2, 
            col3
        )
        SELECT 
            INS.col1,
            INS.col2,
            INS.col3
        FROM Inserted AS INS
    END;
END;

Test it with:
INSERT dbo.Table1
    (col1, col2, col3)
VALUES
    ('session1', 'value1', 'type1');

INSERT dbo.Table1
    (col1, col2, col3)
VALUES
    ('session2', 'value2', 'type2'),
    ('session3', 'value3', 'type3');

SELECT * FROM dbo.Table1 AS T1;
SELECT * FROM dbo.Table2 AS T2;

Results:

