带参数的SP_ExecuteSQL不喜欢Contains子句

时间:2013-02-28 20:12:46

标签: sql sql-server sp-executesql

我的任务是修改存储过程,使它看起来像这样:

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

无论出于何种原因,第一组语句都可以正常工作。第二个没有。我收到以下错误消息:Syntax error near '"' in the full-text search condition '"*00000000'.

如果我从@ID删除4个字符,则第二组语句也可以。显然,它与@ID或列ID的长度有关,但我无法弄清楚是什么。

1 个答案:

答案 0 :(得分:2)

您在动态SQL的参数中将@ID2定义为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