web-dev-qa-db-ja.com

SQL JobAgentが引用符をアポストロフィとして解釈しないようにする

SQL Job Agentが引用符_"_をアポストロフィ_'_として解釈するのに苦労しています。

SQL Server Management Studioで機能するT-SQLクエリがありますが、T-SQLスクリプトステップとまったく同じステートメントをSQLServerエージェントジョブに挿入すると機能しません。

次のT-SQLステートメントを理解するには、何をすべきかを指摘すると役立つ場合があります。そもそも、データウェアハウスキューブへのMDXクエリを作成しました。このクエリは、CRMにインポートする必要がある各顧客の製品使用をフェッチします。

次に、このMDXクエリはOPENQUERYステートメントで実行され、結果が「操作」されて正しいデータ型に変換されます。

この結果は、リンクサーバーのテーブルに挿入されます。

_INSERT INTO [Linked OLE DB Server].[DB].[dbo].[Destination table]
(Columns)
SELECT 
Dataconversion and Dataconsolitation
FROM OPENQUERY( [Linked SSAS Server], 'great mdx statement with [Measures].[Measures] on columns 
dimensions on rows FROM cube')
_

クエリはSQLServer Management Studioで正常に実行され、期待される結果が得られます。

MDXのメジャーは、例としてOPENQUERYの外側に引用符で囲まれています。

_SELECT 
CONVERT(float, "[Measures].[average_price]") AS AVG_Price
FROM OPENQUERY(
    [Linked SSAS], 
    'SELECT { 
         [Measures].[average_price]
    } ON COLUMNS,
    NON EMPTY {
         {[customers].[customerNR].CHILDREN}
    } ON ROWS
    FROM [DWH]
')
_

しかし、このSQLステートメントをSQL Serverエージェントジョブにコピーすると、CONVERT(float, "[Measures].[average_price]")CONVERT(float, '[Measures].[average_price]')として解釈されます。テキスト '[Measures]。[average_price]'をfloatに変換できないことは明らかですが、SQL Serverエージェントが変換しようとするのはなぜですか? 引用符アポストロフィとして解釈されないようにするにはどうすればよいですか?

わからないことがあればお尋ねください。

ここでクエリ全体に関する詳細情報が必要な場合は、次のとおりです。

_INSERT INTO [DATSA0014].[MACO_MSCRM_BUFFER].[dbo].[PROD_NUTZ_TOCRM]
    (
    [IDKEY]
    ,[PROD_HAUPT_GRP]
    ,[HERSTELLER]
    ,[HERSTELLER_AJ]
    ,[HAENDLER]
    ,[Profil]
    ,[WAEHRUNG]
    ,[NIEDERLASSUNG]
    ,[KUNDE]
    ,[MENGE_VJ]
    ,[MENGE_AJ]
    ,[MENGE_PLAN]
    ,[YTD_MENGE_VJ]
    ,[YTD_MENGE_AJ]
    ,[YTD_MENGE_PLAN]
    ,[AVG_PREIS_VJ]
    ,[AVG_PREIS_AJ]
    ,[YTD_AVG_PREIS_VJ]
    ,[YTD_AVG_PREIS_AJ]
    ,[UMSATZ_VJ]
    ,[UMSATZ_AJ]
    ,[UMSATZ_PLAN]
    ,[YTD_UMSATZ_VJ]
    ,[YTD_UMSATZ_AJ]
    ,[YTD_UMSATZ_Plan]
    )
SELECT
    (   CONVERT(varchar(15),"[KNA1].[KUNNR].[KUNNR].[MEMBER_CAPTION]") + '_' +
        CONVERT(varchar(5), "[TVKO].[VKORG].[VKORG].[MEMBER_CAPTION]") + '_' +
        CONVERT(varchar(10),COALESCE(
            "[T179].[Parent].[Level 05].[MEMBER_CAPTION]",
            "[T179].[Parent].[Level 04].[MEMBER_CAPTION]",
            "[T179].[Parent].[Level 03].[MEMBER_CAPTION]",
            "[T179].[Parent].[Level 02].[MEMBER_CAPTION]"
    ))) AS [IDKEY] ,
    CONVERT(varchar(100),COALESCE(
        "[T179].[Parent].[Level 05].[MEMBER_CAPTION]",
        "[T179].[Parent].[Level 04].[MEMBER_CAPTION]",
        "[T179].[Parent].[Level 03].[MEMBER_CAPTION]",
        "[T179].[Parent].[Level 02].[MEMBER_CAPTION]"
    )) AS [PROD_HAUPT_GRP] ,
    '100' AS HERSTELLER,
    '100' AS HERSTELLER_AJ,
    '' AS HAENDLER,
    '' AS Profil,
    'EUR' AS WAEHRUNG,
    CONVERT(varchar(50), "[TVKO].[VKORG].[VKORG].[MEMBER_CAPTION]") AS NIEDRLASSUNG,
    CONVERT(varchar(30),"[KNA1].[KUNNR].[KUNNR].[MEMBER_CAPTION]") AS KUNDE,
    TRY_CONVERT(float, "[Measures].[Garnituren_VJ]") AS MENGE_VJ, 
    TRY_CONVERT(float, "[Measures].[Garnituren]") AS MENGE_AJ, 
    TRY_CONVERT(float, "[Measures].[PlanGarnituren]") AS MENGE_PLAN, 
    TRY_CONVERT(float, "[Measures].[Garnituren_VJ]") AS YTD_MENGE_VJ, 
    TRY_CONVERT(float, "[Measures].[Garnituren]") AS YTD_MENGE_AJ, 
    TRY_CONVERT(float, "[Measures].[PlanGarnituren]") AS YTD_MENGE_PLAN, 
    TRY_CONVERT(float, "[Measures].[Durchschnittspreis_YTD_VJ_NN]") AS AVG_PREIS_VJ,
    TRY_CONVERT(float, "[Measures].[Durchschnittspreis_NN]") AS AVG_PREIS_AJ,
    TRY_CONVERT(float, "[Measures].[Durchschnittspreis_YTD_VJ_NN]") AS YTD_AVG_PREIS_VJ,
    TRY_CONVERT(float, "[Measures].[Durchschnittspreis_NN]") AS YTD_AVG_PREIS_AJ,
    TRY_CONVERT(float, "[Measures].[VV923_VJ]") AS UMSATZ_VJ, 
    TRY_CONVERT(float, "[Measures].[VV923]") AS UMSATZ_AJ, 
    TRY_CONVERT(float, "[Measures].[VV923001]") AS UMSATZ_PLAN,
    TRY_CONVERT(float, "[Measures].[VV923_VJ]") AS YTD_UMSATZ_VJ, 
    TRY_CONVERT(float, "[Measures].[VV923]") AS YTD_UMSATZ_AJ, 
    TRY_CONVERT(float, "[Measures].[VV923001]") AS YTD_UMSATZ_PLAN
FROM OPENQUERY( [DATSA8151_OLAP], '
WITH MEMBER Durchschnittspreis_NN AS IIF([Measures].[Durchschnittspreis]=1/0 OR [Measures].[Durchschnittspreis]=-1/0,NULL,[Measures].[Durchschnittspreis])
MEMBER Durchschnittspreis_YTD_VJ_NN AS IIF([Measures].[Durchschnittspreis_YTD_VJ]=1/0 OR [Measures].[Durchschnittspreis_YTD_VJ]=-1/0,NULL,[Measures].[Durchschnittspreis_YTD_VJ])

SELECT { 
    [Measures].[Garnituren_VJ] AS MENGE_VJ, 
    [Measures].[Garnituren] AS MENGE_AJ, 
    [Measures].[PlanGarnituren] AS MENGE_PLAN, 
    [Durchschnittspreis_NN] AS AVG_PREIS_AJ, 
    [Durchschnittspreis_YTD_VJ_NN] AS AVG_PREIS_VJ, 
    [Measures].[VV923_VJ] AS UMSATZ_VJ, 
    [Measures].[VV923] AS UMSATZ, 
    [Measures].[VV923001] AS UMSATZ_PLAN
} ON COLUMNS ,

NON EMPTY {
    {
        { [KNA1].[KUNNR].CHILDREN } * 
        { [TVKO].[VKORG].&[NL10], 
            [TVKO].[VKORG].&[PL10], 
            [TVKO].[VKORG].&[GB10], 
            [TVKO].[VKORG].&[FR10], 
            [TVKO].[VKORG].&[IT10], 
            [TVKO].[VKORG].&[AT10], 
            [TVKO].[VKORG].&[SK10], 
            [TVKO].[VKORG].&[CZ10], 
            [TVKO].[VKORG].&[RO10], 
            [TVKO].[VKORG].&[RU10], 
            [TVKO].[VKORG].&[DE10], 
            [TVKO].[VKORG].&[RU11], 
            [TVKO].[VKORG].&[ES10] 
        }  * 
        { [T179].[Parent].&[3], 
            [T179].[Parent].&[414], 
            [T179].[Parent].&[415], 
            [T179].[Parent].&[441], 
            [T179].[Parent].&[469], 
            [T179].[Parent].&[472], 
            [T179].[Parent].&[475], 
            [T179].[Parent].&[483], 
            [T179].[Parent].&[722], 
            [T179].[Parent].&[835], 
            [T179].[Parent].&[958], 
            [T179].[Parent].&[960], 
            [T179].[Parent].&[961], 
            [T179].[Parent].&[974], 
            [T179].[Parent].&[975], 
            [T179].[Parent].&[984], 
            [T179].[Parent].&[1010], 
            [T179].[Parent].&[1025], 
            [T179].[Parent].&[1033], 
            [T179].[Parent].&[1071], 
            [T179].[Parent].&[1122], 
            [T179].[Parent].&[1178], 
            [T179].[Parent].&[1182], 
            [T179].[Parent].&[1194], 
            [T179].[Parent].&[1204], 
            [T179].[Parent].&[1208], 
            [T179].[Parent].&[1270], 
            [T179].[Parent].&[1281], 
            [T179].[Parent].&[1284], 
            [T179].[Parent].&[1290],
            [T179].[Parent].&[1297] 
        } 
    } 
} ON ROWS  

FROM [VertriebsDWH] 

WHERE ( 
    [IC].[IC].&[0], 
    [Zeit].[Year -  Month -  Date].[Year].&[2016], 
    [Zeit].[Year Name].&[2016] 
)

CELL PROPERTIES VALUE, FORMATTED_VALUE, CELL_ORDINAL ' )
_
2
superschaf

T-SQLジョブステップで引用符で囲まれた識別子をオンにする必要があります。

SET QUOTED_IDENTIFIER ON;

既定では、SQL ServerAgentは引用符をQUOTED_IDENTIFIEROFFであるかのように扱います。つまり、引用符で囲まれた項目はリテラルとして扱われます。 QUOTED_IDENTIFIERONを回すと、それらのアイテムを列名として扱うことができます。

この問題については、 this MSDNブログエントリを参照してください。

2
Max Vernon