UPDATE查询不适用于预定作业

时间:2016-09-27 15:26:03

标签: sql sql-server sql-agent-job

我已经写了这个查询来更新我的数据库。

UPDATE SMGCARTES
SET scr_flspedito = '1'
    , scr_dtmodifica = dt_conf
FROM (
    SELECT scr_flspedito
        , scr_codsoc societa
        , scr_numcartone cartone
        , scr_numordine num_ordine_ss
        , ordine num_ordine_px
        , DATA_CONF AS dt_conf
    FROM SMGCARTES A
    LEFT JOIN SMGBOLTES
        ON a.scr_numordine = bll_numordine
            AND a.scr_codsoc = bll_codsoc
    RIGHT JOIN (
        SELECT DISTINCT CASE ISNULL(NULLIF(CHARINDEX('/', "Riferimento Spedizione", 1) - 1, - 1), len("Riferimento Spedizione"))
                WHEN len("Riferimento Spedizione")
                    THEN "Riferimento Spedizione"
                ELSE SUBSTRING("Riferimento Spedizione", 1, CHARINDEX('/', "Riferimento Spedizione", 1) - 1)
                END AS ordine
            , "Data consegna prevista" AS cons_prev
            , "Data Conferimento Hub" AS DATA_CONF
        FROM IMPORT_PALLEX
        WHERE "Riferimento Spedizione" IS NOT NULL

        UNION ALL

        SELECT DISTINCT CASE ISNULL(NULLIF(CHARINDEX('/', "Riferimento Cliente", 1) - 1, - 1), len("Riferimento Cliente"))
                WHEN len("Riferimento Cliente")
                    THEN "Riferimento Cliente"
                ELSE SUBSTRING("Riferimento Cliente", 1, CHARINDEX('/', "Riferimento Cliente", 1) - 1)
                END AS ordine
            , "Data consegna prevista" AS cons_prev
            , "Data Conferimento Hub" AS DATA_CONF
        FROM IMPORT_PALLEX
        WHERE "Riferimento Spedizione" IS NOT NULL

        UNION ALL

        SELECT DISTINCT CASE ISNULL(NULLIF(CHARINDEX('/', "Riferimento Spedizione", 1) - 1, - 1), len("Riferimento Spedizione"))
                WHEN len("Riferimento Spedizione")
                    THEN "Riferimento Spedizione"
                ELSE SUBSTRING("Riferimento Spedizione", CHARINDEX('/', "Riferimento Spedizione", 1) + 1, LEN("Riferimento Spedizione"))
                END AS ordine
            , "Data consegna prevista" AS cons_prev
            , "Data Conferimento Hub" AS DATA_CONF
        FROM IMPORT_PALLEX
        WHERE "Riferimento Spedizione" IS NOT NULL

        UNION ALL

        SELECT DISTINCT CASE ISNULL(NULLIF(CHARINDEX('/', "Riferimento Cliente", 1) - 1, - 1), len("Riferimento Cliente"))
                WHEN len("Riferimento Cliente")
                    THEN "Riferimento Cliente"
                ELSE SUBSTRING("Riferimento Cliente", CHARINDEX('/', "Riferimento Cliente", 1) + 1, LEN("Riferimento Cliente"))
                END AS ordine
            , "Data consegna prevista" AS cons_prev
            , "Data Conferimento Hub" AS DATA_CONF
        FROM IMPORT_PALLEX
        WHERE "Riferimento Spedizione" IS NOT NULL
        ) B
        ON a.scr_numordine = ordine
            OR a.scr_numordine = '00' + ordine
            OR ordine = bll_numbolla
    WHERE a.scr_numordine IS NOT NULL
        AND (
            scr_flspedito = '0'
            OR scr_dtmodifica IS NULL
            )
    ) C
WHERE scr_numordine = num_ordine_ss
    AND scr_codsoc = societa

当我从sql server手动运行查询时,它可以工作,但当我把它放入预定的作业时,服务器给我一个错误:

  

传递给子字符串函数的长度参数无效。 [SQLSTATE 42000](错误536)。步骤失败了。

我已经看到这个错误是当你没有以正确的方式使用CHARINDEX时,但是当我手动运行查询时它会起作用!

任何人都可以帮助我吗?

问题解决了!我在查询中添加了两个游标,我将值放在游标中......它完美运行!但我不知道为什么!!!!

任何??

0 个答案:

没有答案