2017-11-29 12 views
0

動的SQLクエリを使用して私の間違いが何であるか把握する必要があります。 以下はサンプルクエリですが、どこに間違いがあるかはわかりません。SQL Server動的クエリエラー

DECLARE @p_orgcompreq NVARCHAR(10)='1.1' 
DECLARE @table_name NVARCHAR(50)='test' 
DECLARE @treelevel INT 
DECLARE @OrgCompCode_Parent NVARCHAR(10)='1.1' 
DECLARE @OrgCompCode_Child NVARCHAR(10)='1.1.1' 
DECLARE @SQLQuery NVARCHAR(max) 

SELECT @treelevel = @@NESTLEVEL - 1 

SET @SQLQuery = 'insert into ' + @table_name 
       + 
' (level,OrgCompCode_Parent,OrgCompCode_Child) values (replicate(CHAR(45), ' 
       + Ltrim(Str(@treelevel)) 
       + ' * 1)   + ltrim(str(' 
       + Ltrim(Str(@treelevel)) + ')),''' + (@OrgCompCode_Parent) + 
       ''',''' + 
           @OrgCompCode_Child + ')' 

EXEC (@SQLQuery) 

SELECT @SQLQuery 

以下は、発生したエラーです。誰かが私を助けてくれることを願います。ありがとう。

メッセージ105、レベル15、状態1、行2 文字列 '1.1.1)'の後に囲まれた引用符。メッセージ102、レベル15、状態1、行2 '1.1.1)'の近くの構文が正しくありません。
(1行(複数可)の影響を受ける)

答えて

2

あなたはこれがあなたに次のメッセージが表示されますPrint

DECLARE @p_orgcompreq NVARCHAR(10)='1.1' 
DECLARE @table_name NVARCHAR(50)='test' 
DECLARE @treelevel INT 
DECLARE @OrgCompCode_Parent NVARCHAR(10)='1.1' 
DECLARE @OrgCompCode_Child NVARCHAR(10)='1.1.1' 
DECLARE @SQLQuery NVARCHAR(max) 

SELECT @treelevel = @@NESTLEVEL - 1 

SET @SQLQuery = 'insert into ' + @table_name 
       + 
' (level,OrgCompCode_Parent,OrgCompCode_Child) values (replicate(CHAR(45), ' 
       + Ltrim(Str(@treelevel)) 
       + ' * 1)   + ltrim(str(' 
       + Ltrim(Str(@treelevel)) + ')),''' + (@OrgCompCode_Parent) + 
       ''',''' + 
           @OrgCompCode_Child + ')' 

Print @SQLQuery 

を実行することにより、これを確認することができます。

insert into test (level,OrgCompCode_Parent,OrgCompCode_Child) values (replicate(CHAR(45), -1 * 1)   + ltrim(str(-1)),'1.1','1.1.1) 

編集

エラーを見るエラーが@OrgCompCode_Child + ')'ある部分であり、次のようなこの問題を解決する必要があります

DECLARE @p_orgcompreq NVARCHAR(10)='1.1' 
DECLARE @table_name NVARCHAR(50)='test' 
DECLARE @treelevel INT 
DECLARE @OrgCompCode_Parent NVARCHAR(10)='1.1' 
DECLARE @OrgCompCode_Child NVARCHAR(10)='1.1.1''' 
DECLARE @SQLQuery NVARCHAR(max) 

SELECT @treelevel = @@NESTLEVEL - 1 

SET @SQLQuery = 'insert into ' + @table_name 
       + 
' (level,OrgCompCode_Parent,OrgCompCode_Child) values (replicate(CHAR(45), ' 
       + Ltrim(Str(@treelevel)) 
       + ' * 1)  + ltrim(str(' 
       + Ltrim(Str(@treelevel)) + ')),''' + (@OrgCompCode_Parent) + 
       ''',''' + 
           @OrgCompCode_Child + ')' 

OR

DECLARE @p_orgcompreq NVARCHAR(10)='1.1' 
DECLARE @table_name NVARCHAR(50)='test' 
DECLARE @treelevel INT 
DECLARE @OrgCompCode_Parent NVARCHAR(10)='1.1' 
DECLARE @OrgCompCode_Child NVARCHAR(10)='1.1.1' 
DECLARE @SQLQuery NVARCHAR(max) 

SELECT @treelevel = @@NESTLEVEL - 1 

SET @SQLQuery = 'insert into ' + @table_name 
       + 
' (level,OrgCompCode_Parent,OrgCompCode_Child) values (replicate(CHAR(45), ' 
       + Ltrim(Str(@treelevel)) 
       + ' * 1)  + ltrim(str(' 
       + Ltrim(Str(@treelevel)) + ')),''' + (@OrgCompCode_Parent) + 
       ''',''' + 
           @OrgCompCode_Child +'''' + ')' 

print @SQLQuery 
EXEC (@SQLQuery) 

SELECT @SQLQuery 
+0

これが答えではありません。 – plaidDK

+0

@トム:ありがとう、トム、これは完璧です。 –

+0

@EliseoJr、心配はいりません:) – Tom