2016-08-17 9 views
0

私はXrefというテーブルを持っています。 コラムで構成ShaftecNo, CompNo, CompNameSQLピボットクエリエラー:動的な会社名。エラー - 非公開の引用符

Xref Table

私は[ShaftecNo],[CompNo]、その後、列など[CompName])が表示され、ピボットクエリを記述しようとしています。次の形式で結果として私のストアドプロシージャで使用

New Pivot Table From Xrefs

コードは次のようです。

declare @sql nvarchar(max); 
-- generate the column names 
select @sql = coalesce(@sql + ',', '') + QuoteName([CompName]) 
from (select DISTINCT CompName from [Xrefs] WHERE CompName LIKE '[a-z]%') T; 
-- replace the column names into the generic PIVOT form 
set @sql = REPLACE(' 
select ShaftecNo, :columns: 
from (SELECT ShaftecNo,CompNo,CompName FROM Xrefs INNER JOIN Product ON Xrefs.ShaftecNo COLLATE Latin1_General_CI_AS = Product.KeyCode) p 
pivot (max(CompNo) for CompName in (:columns:)) as pv', 
':columns:', @sql) 
-- execute for the results 
exec (@sql) 

私は[-R]そのエラーのような広い範囲を行う場合、私は[-C]( - Cの範囲で始まるのみ[COMPNAME]年代)に変更した場合に使用LIKEコマンドは動作しますのでご注意ください。

Msg 105, Level 15, State 1, Line 4 Unclosed quotation mark after the character string 'ALFAROME'. Msg 102, Level 15, State 1, Line 4 Incorrect syntax near 'ALFAROME'.

さまざまな範囲でエラーが変化します。私が好きなものを完全に取り除いても、クエリは機能しますが、会社名(つまり、ブレークエンジニアリング)が欠けてしまいます。

、誰もがあなたのCompNameフィールドは、あなたの@sql値を構築するときにそれらを交換/削除する必要がありますので、単一引用符が含まれている値を持っているようですね

+0

@sql値を印刷できますか、その行にエラーがありますか?最初に 'exec(@sql)'の前に 'PRINT @ SQL'を入れてください。この特定のメンテナンスの問題は常にあなたを悩ますことに注意してください。動的SQLは痛みです。通常、「レポートレイヤー」にクロスタブを実装します –

+0

テーブルのデータを確認します。彼らは引用を含んでいますか?私はそう思う。 –

+0

まだ問題があります。 print @sqlを使用すると、procduredのSQLコードが正しくないことがわかります。それは何らかの未知の理由のために終わりを告げる。たとえば、 – Jason

答えて

0

助けることができます:すべてのための

declare @sql nvarchar(max); 
-- generate the column names 
select @sql = coalesce(@sql + ',', '') + QuoteName(replace([CompName],'''','')) 
from (select DISTINCT CompName from [Xrefs] WHERE CompName LIKE '[a-z]%') T; 
-- replace the column names into the generic PIVOT form 
set @sql = REPLACE(' 
select ShaftecNo, :columns: 
from (SELECT CompNo,replace(CompName,'''''''','''') as CompName FROM a INNER JOIN Product ON Xrefs.ShaftecNo COLLATE Latin1_General_CI_AS = Product.KeyCode) p 
pivot (max(CompNo) for CompName in (:columns:)) as pv', 
':columns:', @sql) 
-- execute for the results 
exec (@sql) 
+0

ご協力いただきありがとうございます。 PRINT @SQLコマンドは夢のように機能しました。問題はランダムなUnicode ASCII文字です - 160. [Xrefs_Temp]から別のCompname、ASCII(SUBSTRING(Compname、LEN(Compname)-1、LEN(Compname)))を使用して取得する必要がありました。その後、私はそれを置き換え、それは働いた。おかげで再び – Jason

0

感謝をあなたの助け。 PRINT @SQLコマンドは夢のように機能しました。 (ありがとうNick.McDermaid)。

問題はランダムUnicodeのASCII文字だった -

... 160私は使用して取得しなければならなかった明確なCOMPNAME、ASCII(SUBSTRING(COMPNAME、LEN(COMPNAME)-1、LEN(COMPNAME)を選択))から[Xrefs_Temp]。

それから、私はそれをブランクに置き換えて働かせました。

ありがとうございました

+0

次のランダムなアスキー文字が現れるまで!代わりに 'レポーティング層'でこれを行うことを検討してください。 –

関連する問題