叶子

闲言碎语

sql server 线程

create PROCEDURE sp_Sort_insert
(
  @sTable VARCHAR(255),
  @iSortParentID int OUTPUT,
  @sSortName NVARCHAR(255)
)
AS
BEGIN
  SET NOCOUNT ON
  DECLARE @iSortNum int
  DECLARE @s varchar(4000)

  SET @s='select @iSortNum=COUNT(0) FROM '+@sTable+' where SortID=@iSortParentID'
  EXEC (@s)

 --中间略
END

执行到exec报@iSortNum没有定义.询问得知exec启用了一个新线程,所以会说没有定义.

可是因为表是动态,又不能

select @iSortNum=COUNT(0) FROM '+@sTable+' where SortID=@iSortParentID

执行=_=

辛苦了一个下午的教训,白忙活了…

解决办法:

DECLARE @s NVARCHAR(4000)
SET @s=N'select @iSortNum=COUNT(0) FROM '+@sTable+' where SortID='+cast(@iSortParentID AS VARCHAR)
EXEC sp_executesql @s,N'@iSortNum int out',@iSortNum out

注意@s类型,varchar会错. 谢DLL:)