CREATE PROCEDURE [UP_CU_GETPAGED]
(
@NAMEOREMAIL varchar(30),
@ALLOWLOGIN bit,
@RSTARTTIME datetime,
@RENDTIME datetime,
@LSTARTTIME datetime,
@LENDTIME datetime,
@PAGEINDEX int,
@PAGESIZE int,
@ORDERBY varchar(100)
)
AS

DECLARE @SQL nvarchar(2000)
DECLARE @RecordCount int
SET @SQL = N'
SELECT @RecordCount = count([CU_NAME]) FROM [CU_CUSTOMER] WHERE
(@NAMEOREMAIL IS NULL OR [CU_NAME] LIKE ''%'' + @NAMEOREMAIL + ''%'' OR [CU_EMAIL] LIKE ''%'' + @NAMEOREMAIL + ''%'') AND
(@ALLOWLOGIN IS NULL OR [CU_ALLOWLOGIN] = @ALLOWLOGIN) AND
(@RSTARTTIME IS NULL OR [CU_REGISTERTIME] > @RSTARTTIME) AND
(@RENDTIME IS NULL OR [CU_REGISTERTIME] < @RENDTIME) AND
(@LSTARTTIME IS NULL OR [CU_LASTLOGINTIME] > @LSTARTTIME) AND
(@LENDTIME IS NULL OR [CU_LASTLOGINTIME] < @LENDTIME) ORDER BY @ORDERBY
SELECT @RecordCount
'
EXEC sp_executesql @SQL,N'@RecordCount int output'
GO执行后发生错误消息 137,级别 15,状态 2,第 3 行
必须声明标量变量 "@NAMEOREMAIL"。

解决方案 »

  1.   

    EXEC sp_executesql @SQL,N'@RecordCount int output',@RecordCount
      

  2.   

     EXEC sp_executesql @SQL,N'@RecordCount int output'要在这里全部声明的
      

  3.   

    --把變量寫出來,如:
    '
        SELECT @RecordCount = count([CU_NAME]) FROM [CU_CUSTOMER]    WHERE
            '+@NAMEOREMAIL+' IS NULL OR [CU_NAME] LIKE %'
    ....
      

  4.   

    http://blog.csdn.net/fredrickhu/archive/2009/09/21/4574840.aspx看看动态语句基本语法
    EXEC sp_executesql 需要声明所有的变量
      

  5.   

    SET @SQL = N'
        SELECT @RecordCount = count([CU_NAME]) FROM [CU_CUSTOMER]    WHERE
            (@NAMEOREMAIL IS NULL OR [CU_NAME] LIKE ''%' + @NAMEOREMAIL + '%'' OR [CU_EMAIL] LIKE ''%' + @NAMEOREMAIL + '%'') AND
            (@ALLOWLOGIN IS NULL OR [CU_ALLOWLOGIN] = '+@ALLOWLOGIN+') AND
            (@RSTARTTIME IS NULL OR [CU_REGISTERTIME] > '+@RSTARTTIME+') AND
            (@RENDTIME IS NULL OR [CU_REGISTERTIME] < '+@RENDTIME+') AND
            (@LSTARTTIME IS NULL OR [CU_LASTLOGINTIME] > '+@LSTARTTIME+') AND
            (@LENDTIME IS NULL OR [CU_LASTLOGINTIME] < '@LENDTIME') ORDER BY '+@ORDERBY'+
        SELECT '+@RecordCount
      

  6.   


    SET @SQL = N'
        SELECT @RecordCount = count([CU_NAME]) FROM [CU_CUSTOMER]    WHERE
            (@NAMEOREMAIL IS NULL OR [CU_NAME] LIKE ''%'' + @NAMEOREMAIL + ''%'' OR [CU_EMAIL] LIKE ''%'' + @NAMEOREMAIL + ''%'') AND
            (@ALLOWLOGIN IS NULL OR [CU_ALLOWLOGIN] = @ALLOWLOGIN) AND
            (@RSTARTTIME IS NULL OR [CU_REGISTERTIME] > @RSTARTTIME) AND
            (@RENDTIME IS NULL OR [CU_REGISTERTIME] < @RENDTIME) AND
            (@LSTARTTIME IS NULL OR [CU_LASTLOGINTIME] > @LSTARTTIME) AND
            (@LENDTIME IS NULL OR [CU_LASTLOGINTIME] < @LENDTIME) ORDER BY @ORDERBY
        SELECT @RecordCount
        '
    将上面的参数部分换成字符串连接的形式,如
    (@ALLOWLOGIN IS NULL OR [CU_ALLOWLOGIN] = @ALLOWLOGIN) AND 改成
    '...('+@ALLOWLOGIN+' is null  OR [CU_ALLOWLOGIN] = '+@ALLOWLOGIN+') AND'最后sp_executesql处,把所有的参数信息都加上,然后再把参数的值都写上
      

  7.   

    EXEC sp_executesql @SQL,N'@RecordCount int output'
    这里要把其他的变量也写进去
      

  8.   

     最后的语句   EXEC sp_executesql @SQL,N'@NAMEOREMAIL varchar(30),@ALLOWLOGIN bit,@RSTARTTIME datetime,@RENDTIME datetime,@LSTARTTIME datetime,@LENDTIME datetime,@PAGEINDEX int,@PAGESIZE int,@ORDERBY varchar(100),@recordCount int output',@NAMEOREMAIL,@ALLOWLOGIN ,@RSTARTTIME ,    @RENDTIME ,    @LSTARTTIME, @LENDTIME, @PAGEINDEX,@PAGESIZE, @ORDERBY,@recordCount output
      

  9.   


    SET @SQL = N'
        SELECT @RecordCount = count([CU_NAME]) FROM [CU_CUSTOMER]    WHERE
            (@NAMEOREMAIL IS NULL OR [CU_NAME] LIKE ''%' + @NAMEOREMAIL + '%'' OR [CU_EMAIL] LIKE ''%' + @NAMEOREMAIL + '%'') AND
            (@ALLOWLOGIN IS NULL OR [CU_ALLOWLOGIN] = '+@ALLOWLOGIN+') AND
            (@RSTARTTIME IS NULL OR [CU_REGISTERTIME] > '+@RSTARTTIME+') AND
            (@RENDTIME IS NULL OR [CU_REGISTERTIME] < '+@RENDTIME+') AND
            (@LSTARTTIME IS NULL OR [CU_LASTLOGINTIME] > '+@LSTARTTIME+') AND
            (@LENDTIME IS NULL OR [CU_LASTLOGINTIME] < '@LENDTIME') ORDER BY '+@ORDERBY'+
        SELECT '+@RecordCount