SQL Exec无法执行长字符串

时间:2013-11-26 09:35:54

标签: sql sql-server exec dynamic-sql

这是我的代码

DECLARE @sql nvarchar(4000)
set @sql = 'WITH CTE AS
(
    Select *, ROW_NUMBER() OVER (ORDER BY ' + @order + ' ' + @Desc + ') AS  RowNum 

    from (SELECT     ID, Subject from a 
    WHERE     (Subject LIKE N''%'' + @searchText + N''%'')) 
)

SELECT *
FROM CTE
WHERE RowNum  BETWEEN (@pageIndex - 1) * @pageSize + 1
            AND @pageIndex * @pageSize ;';

其中@order =“ID”和@pageIndex = 1和@pageSize = 5和@searchText ='a'和@Desc ='DESC'

我写了

select @sql

查看@sql是否可执行。我复制并粘贴并运行它。有效。 然后我写了

exec @sql

错误!似乎exec只是尝试从@sql的第一个执行一些字符。 @sql是否有任何限制?

p.s:错误就像这样

  

名称'......... someth'不是有效的标识符。

1 个答案:

答案 0 :(得分:0)

请尝试以下代码。

DECLARE @sql nvarchar(max)
设置@sql ='.............可执行的东西.................';

由于字符串的长度超过4000个字符,可能会发生此错误