DECLARE @SQL NVARCHAR(3000)
DECLARE @TbName varchar(50)
SET @TbName='type_Trade'
DECLARE @typeParentID INT
SET @typeParentID=0
SET @SQL='SELECT typeID,typeName FROM ' + @TbName + ' WHERE typePath=' + @typeParentID
EXEC(@SQL)如题,报错误如下:
将 varchar 值 'SELECT typeID,typeName FROM type_Trade WHERE typePath=' 转换为数据类型为 int 的列时发生语法错误。为什么?

解决方案 »

  1.   

    SET @SQL='SELECT typeID,typeName FROM ' + @TbName + ' WHERE typePath=' + ltrim(@typeParentID)
      

  2.   

    DECLARE @SQL NVARCHAR(3000)
    DECLARE @TbName varchar(50)
    SET @TbName='type_Trade'
    DECLARE @typeParentID INT
    SET @typeParentID=0
    SET @SQL='SELECT typeID,typeName FROM ' + @TbName + ' WHERE typePath=' + Cast(@typeParentID As Varchar)
    EXEC(@SQL)
      

  3.   

    INT, DateTime類型在拼接動態SQL語句的時候需要做下轉換
      

  4.   

    呵呵
    谢谢楼上的
    自己大意了
    SET @SQL='SELECT typeID,typeName FROM ' + @TbName + ' WHERE typePath=' + Cast(@typeParentID AS varchar)
      

  5.   

    SET @SQL='SELECT typeID,typeName FROM ' + @TbName + ' WHERE typePath=' + ltrim(@typeParentID)--------
    這個也可以的,這個是借用ltrim函數巧妙的做了轉換。