2

私は、ストアド プロシージャを次のように変更する任務を負っています。

DECLARE @ID nvarchar(10)
SET @ID = '0000000001'

DECLARE @SQL nvarchar(200)
SET @SQL = 'SELECT AppN FROM Apps WHERE CONTAINS(ID, ''"*'' + @ID + ''*"'')'

EXECUTE SP_EXECUTESQL @SQL

文字列連結ではなく、SP_EXECUTESQL のパラメーター リストを使用します。問題は、以下が機能していないように見えることです。

DECLARE @CID nvarchar(10)
SET @CID = '0000000001'

DECLARE @ID2 nvarchar(14)
SET @ID2 = '"*' + @ID + '*"'

DECLARE @SQL nvarchar(200)
SET @SQL = 'SELECT AppN FROM Apps WHERE CONTAINS(ID, ID2)'

DECLARE @ParamDefinition NCHAR(300)
SET @ParamDefinition = '@ID2        nvarchar(10)'

EXECUTE SP_EXECUTESQL @SQL, @ParamDefinition, @ID2

何らかの理由で、ステートメントの最初のセットは正常に機能します。2番目はそうではありません。次のエラー メッセージが表示されます。Syntax error near '"' in the full-text search condition '"*00000000'.

@ID2 番目のステートメント セットから 4 文字を削除しても機能します。@ID明らかに、どちらかまたは列の長さと関係がありますが、何がわかりIDません。

4

1 に答える 1

2

動的 SQL のパラメーターで@ID2asを定義します。nvarchar(10)

実際には14 文字なので、最後を切り取っています。

これは私にとって正しい変数を出力します:

DECLARE @CID nvarchar(10)
SET @CID = '0000000001'

DECLARE @ID2 nvarchar(14)
SET @ID2 = '"*' + @CID + '*"'

DECLARE @SQL nvarchar(200)
SET @SQL = 'SELECT @ID2'

DECLARE @ParamDefinition NCHAR(300)
SET @ParamDefinition = '@ID2        nvarchar(14)'

EXECUTE SP_EXECUTESQL @SQL, @ParamDefinition, @ID2
于 2013-02-28T21:02:38.907 に答える