2017-04-26 8 views
1

午後の友人。私は以下の構文を持っていますが、私は実際の問題が何であるかを心配しています。 SSMSは「選択」の近くに「間違った構文」というエラーを表示し、SQL文字列全体を私に返す。動的SQLスローイングの構文が正しくありません

誰かが問題の内容を指摘してくれますか、どのように対処してください。

Declare @rep varchar(max) = 'Habib', @startdate varchar(100) = '01/01/2017', @enddate varchar(100) = '03/31/2017' 


SET @rep = CHAR(39)+CHAR(39)[email protected]+CHAR(39)+CHAR(39) 

Declare @sql nvarchar(4000) = 'Select * FROM OPENQUERY(sumSol,''Select 
     representative repName 
     ,hiredate hiredate 
FROM alpha ac 
WHERE smellogram IN (''''1'''',''''3'''',''''4'''',''''5'''',''''6'''') 
AND id IN (Select id from frank) 
       AND ((NOT ((holdingstatus = ''''13'''')))) 
       AND representative IN ('[email protected]+') 
       AND jbhiredate BETWEEN ('+ CHAR(39) + CHAR(39) 
           + CAST(@startdate AS NVARCHAR(500)) + CHAR(39) + CHAR(39) + N') 
           AND (' + CHAR(39) + CHAR(39) + CAST(@enddate AS NVARCHAR(500)) + CHAR(39) + CHAR(39) + N' '')' 


PRINT @SQL 
EXEC sp_ExecuteSQL @SQL 

私が手にエラーが

閉じられていない引用符文字列の後にある

EDIT
これで生成されたSQL

Select * FROM OPENQUERY(sumSol,''Select 
     representative repName 
     ,hiredate hiredate 
FROM alpha ac 
WHERE smellogram IN (''1'',''3'',''4'',''5'',''6'') 
AND id IN (Select id from frank) 
       AND ((NOT ((holdingstatus = ''13'')))) 
       AND representative IN ('Habib') 
       AND jbhiredate BETWEEN (''01/01/2017'') AND (''03/31/2017'')') 
+1

ロットをテストしたわけではありません。生成されたSQLを共有する –

+0

@JohnCappelletti - 編集を参照してください - ありがとう –

答えて

0

すべての二重引用符で紛失するのは簡単です。このため、私はPIPEを使用して一重引用符を指定してから、簡単な置き換えを実行することがよくあります。

引用符の

Declare @rep varchar(max) = 'Habib', @startdate varchar(100) = '01/01/2017', @enddate varchar(100) = '03/31/2017' 

Declare @sql nvarchar(4000) = ' 
Select representative repName 
     ,hiredate hiredate 
From alpha ac 
Where smellogram IN (|1|,|3|,|4|,|5|,|6|) 
    and id IN (Select id from frank) 
    and ((NOT ((holdingstatus = |13|)))) 
    and representative IN (|'[email protected]+'|) 
    and jbhiredate BETWEEN |'+ @startdate + '| AND |' + @enddate +'|' 

Select @SQL = 'Select * FROM OPENQUERY(sumSol,''' + replace(@SQL,'|','''''') + ''')' 

PRINT @SQL 
関連する問題