TSQL V.S MDX 查詢錯誤排解 - 01 - 字串超過變數宣告大小
問題:
欲將 Cube 的資料撈進 Table 中,在使用 Store Procedure 將 MDX 語法透過 OpenQuery 將資料從 Cube 轉入 Table 時,發生下列錯誤
訊息 105,層級 15,狀態 1,行 5
遺漏字元字串 '
遺漏字元字串 '
此問題基本的 Syntax 結構簡化如下
DECLARE @MdxSyntax AS NVARCHAR(4000)
IF @CycleID='M'
BEGIN
SET @MdxSyntax =
SET @MdxSyntax =
'
SELECT * INTO ##BU01505100
FROM OPENQUERY
(MOJOLAP,
FROM OPENQUERY
(MOJOLAP,
''
WITH
WITH
MEMBER [Countery].[City]....
....
....
'')
'
EXEC sp_executesql @MdxSyntax
END
Check MDX 語法,並沒有語法錯誤的問題,原因到底何在?
原因:
轉到英文版上,才發現錯誤訊息有段描述的是... syntax unclosed,也就是說,原本宣告變數 @MdxSyntax 為 NVARCHAR(4000),即字串超過變數所宣告的大小 4000 了....
(P.S. 中英文的差異嗎...)
排解:
想辦法簡化 MDX 語法,好讓字元數少於 4000....
註:
曾嘗試將 NVARCHAR(4000) 換為 NVARCHAR(MAX),但依舊發生上述問題,不知是 OpenQuery 的限制還是... 待確認!
最終解答:
Store Prorcedure 所在環境是 SQL SERVER 2005,而 Cube 是 SQL SERVER 2000 環境,所以...SQL SERVER 2000 沒有 NVARCHAR(MAX)
....