Insert error - convert failed

  • Hello,

    I have one script which displays current running job on the server.

    I want to insert this result into a temp table and wants to setup job running out of SLA but i am getting error as below -

    Msg 257, Level 16, State 3, Line 9

    Implicit conversion from data type sql_variant to varchar is not allowed. Use the CONVERT function to run this query.

    Script is as below -

    CREATE TABLE #CURRENTJOBS

    (SERVER_NAME VARCHAR(200),

    JOB_NAME VARCHAR(200),

    JOB_RUN_DATE_TIME VARCHAR(200),

    CURRENT_RUN_TIME VARCHAR(200),

    JOB_RUN_SECONDS INT);

    INSERT INTO #CURRENTJOBS

    SELECT SERVERPROPERTY('MachineName') AS SERVER_NAME,job.Name AS JOB_NAME ,

    CONVERT(Varchar(20),activity.run_requested_Date,109) AS JOB_RUN_DATE_TIME,

    RIGHT('0'+CONVERT(VARCHAR(2),((DATEDIFF(ss, activity.Run_requested_Date, GETDATE()))/3600)),2) + ':' +

    RIGHT('0'+CONVERT(VARCHAR(2),((DATEDIFF(ss, activity.Run_requested_Date, GETDATE()))%3600)/60),2) + ':' +

    RIGHT('0'+CONVERT(VARCHAR(2),((DATEDIFF(ss, activity.Run_requested_Date, GETDATE()))%60)),2) AS CURRENT_RUN_TIME,

    (DATEDIFF(ss, activity.Run_requested_Date, GETDATE())) JOB_RUN_SECONDS

    FROM msdb.dbo.sysjobs_view job

    INNER JOIN msdb.dbo.sysjobactivity activity

    ON (job.job_id = activity.job_id)

    WHERE run_Requested_date IS NOT NULL AND stop_execution_date IS NULL and Run_requested_Date > GETDATE()-2;

    Can you help me.

  • I have one more script also to find current running job on the server which i need to insert in the temp table and with using IF else loop i can set email alert notification -

    SELECT top 1 j.name as Running_Jobs, ja.Start_execution_date As Starting_time,

    datediff(ss, ja.Start_execution_date,getdate())/60 as [Has_been_running(in Min)]

    FROM msdb.dbo.sysjobactivity ja

    JOIN msdb.dbo.sysjobs j

    ON j.job_id=ja.job_id

    WHERE job_history_id is null

    AND start_execution_date is NOT NULL and start_execution_date > GETDATE() -1

    and datediff(ss, ja.Start_execution_date,getdate())/60 > 60

    --and j.name like '%gdc%'

    ORDER BY start_execution_date

    Can somebody help me.

    Thanks in advance.

  • PritamSalvi (1/10/2013)


    Hello,

    I have one script which displays current running job on the server.

    I want to insert this result into a temp table and wants to setup job running out of SLA but i am getting error as below -

    Msg 257, Level 16, State 3, Line 9

    Implicit conversion from data type sql_variant to varchar is not allowed. Use the CONVERT function to run this query.

    Script is as below -

    CREATE TABLE #CURRENTJOBS

    (SERVER_NAME VARCHAR(200),

    JOB_NAME VARCHAR(200),

    JOB_RUN_DATE_TIME VARCHAR(200),

    CURRENT_RUN_TIME VARCHAR(200),

    JOB_RUN_SECONDS INT);

    INSERT INTO #CURRENTJOBS

    SELECT SERVERPROPERTY('MachineName') AS SERVER_NAME,job.Name AS JOB_NAME ,

    CONVERT(Varchar(20),activity.run_requested_Date,109) AS JOB_RUN_DATE_TIME,

    RIGHT('0'+CONVERT(VARCHAR(2),((DATEDIFF(ss, activity.Run_requested_Date, GETDATE()))/3600)),2) + ':' +

    RIGHT('0'+CONVERT(VARCHAR(2),((DATEDIFF(ss, activity.Run_requested_Date, GETDATE()))%3600)/60),2) + ':' +

    RIGHT('0'+CONVERT(VARCHAR(2),((DATEDIFF(ss, activity.Run_requested_Date, GETDATE()))%60)),2) AS CURRENT_RUN_TIME,

    (DATEDIFF(ss, activity.Run_requested_Date, GETDATE())) JOB_RUN_SECONDS

    FROM msdb.dbo.sysjobs_view job

    INNER JOIN msdb.dbo.sysjobactivity activity

    ON (job.job_id = activity.job_id)

    WHERE run_Requested_date IS NOT NULL AND stop_execution_date IS NULL and Run_requested_Date > GETDATE()-2;

    Can you help me.

    Wrap all your SERVERPROPERY call up into a convert so that it is explicitly casted to VARCHAR, as SQL will not implicitly case it for you.

  • PritamSalvi (1/10/2013)


    I have one more script also to find current running job on the server which i need to insert in the temp table and with using IF else loop i can set email alert notification -

    SELECT top 1 j.name as Running_Jobs, ja.Start_execution_date As Starting_time,

    datediff(ss, ja.Start_execution_date,getdate())/60 as [Has_been_running(in Min)]

    FROM msdb.dbo.sysjobactivity ja

    JOIN msdb.dbo.sysjobs j

    ON j.job_id=ja.job_id

    WHERE job_history_id is null

    AND start_execution_date is NOT NULL and start_execution_date > GETDATE() -1

    and datediff(ss, ja.Start_execution_date,getdate())/60 > 60

    --and j.name like '%gdc%'

    ORDER BY start_execution_date

    Can somebody help me.

    Thanks in advance.

    If this is inserting into a temp table, once done create a sp_send_dbmail script underneath it to check if a row exists in the table and if so email the people who need to know

    INSERT INTO #Temp

    SELECT TOP 1 ...............

    IF @@RowCount > 0

    BEGIN

    EXEC MSDB.dbo.sp_send_dbmail

    .....

Viewing 4 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic. Login to reply