★o★大家来看看/ 存储过程 /的问题★CREATE PROCEDURE proName
(
 @ShowNum int,
 @SortID int
)AS  DECLARE @SQL VARCHAR(100) 
  DECLARE @NUM INT
  SET @NUM = @ShowNum
  SET @SQL = 'SELECT TOP '+CAST(@NUM AS VARCHAR(20))+' * From News where SortID =@SortID or SortID IN (Select ID from NewsSort where ParentID = @SortID)  order by ID desc'EXEC(@SQL)
GO-------------
VS.net 2005 中使用 SqlDataSource绑定时报错信息:执行查询时出错。请检查命令的语法以及参数的类型和值(如果有)。确保他们正确。
必须声明变量 '@SortID'。
第1行:'ParentID'附近有语法错误。高手指点
---------------------
把后面where条件去掉时,这个存储过程是可以使用的。

解决方案 »

  1.   


    CREATE PROCEDURE proName
    (
     @ShowNum int,
     @SortID int
    )AS  DECLARE @SQL VARCHAR(100) 
      DECLARE @NUM INT
      SET @NUM = @ShowNum
      SET @SQL = 'SELECT TOP '+CAST(@NUM AS VARCHAR(20))+' * From News where SortID ='+@SortID+' or SortID IN (Select ID from NewsSort where ParentID ='+ @SortID+')  order by ID desc'EXEC(@SQL)
    GO
      

  2.   

    SET @SQL = 'SELECT TOP '+CAST(@NUM AS VARCHAR(20))+' * From News where SortID ='+ltrim(@SortID)+' or SortID IN (Select ID from NewsSort where ParentID = '+ltrim(@SortID)) +' order by ID desc'
      

  3.   

    SET @SQL = 'SELECT TOP '+CAST(@NUM AS VARCHAR(20))+' * From News where SortID =' + @SortID+ ' or SortID IN (Select ID from NewsSort where ParentID = ' +@SortID +')  order by ID desc'這句改成這樣
      

  4.   

    ---试试这个---
    CREATE PROCEDURE proName
    (
     @ShowNum int,
     @SortID int
    )AS  DECLARE @SQL VARCHAR(100) 
      DECLARE @NUM INT
      SET @NUM = @ShowNum
      SET @SQL = 'SELECT TOP '+rtrim(@NUM)+' * From News where SortID ='+@SortID+' or SortID IN (Select ID from NewsSort where ParentID ='+ @SortID+')  order by ID desc'EXEC(@SQL)
    GO
      

  5.   

    CREATE PROCEDURE proName
    (
     @ShowNum int,
     @SortID int
    )AS  DECLARE @SQL NVARCHAR(4000) 
      DECLARE @NUM INT
      SET @NUM = @ShowNum
      SET @SQL = 'SELECT TOP '+CAST(@NUM AS VARCHAR(20))+' * From News where SortID =@SortID or SortID IN (Select ID from NewsSort where ParentID = @SortID)  order by ID desc'EXEC sp_execute @SQL,N'@SortID int',@SortID
    GO
      

  6.   

    拼結動態語句的時候,後面的變量沒有處理CREATE PROCEDURE proName
    (
     @ShowNum int,
     @SortID int
    )AS  DECLARE @SQL VARCHAR(100) 
      DECLARE @NUM INT
      SET @NUM = @ShowNum
      SET @SQL = 'SELECT TOP '+CAST(@NUM AS VARCHAR(20))+' * From News where SortID ='+CAST(@SortID AS VARCHAR(20))+' or SortID IN (Select ID from NewsSort where ParentID = '+CAST(@SortID AS VARCHAR(20))+')  order by ID desc'EXEC(@SQL)
    GO
      

  7.   


    感谢楼上各位正解 和rtrim 、ltrim的思路有下面几为仁兄chuifengde(树上的鸟儿)    leo_lesley(leo) ( )   paoluo(一天到晚游泳的鱼) 
    不过问题不在这里,测试时开始出错后来将
    DECLARE @SQL VARCHAR(100) 改成
    DECLARE @SQL VARCHAR(1000)就可以了 -------------------------------再把问扩展一下 向大家请教以此存储过程为例如何在slq语句中 控制 字段(Title)中  显示字符的长度select Title from news 
      

  8.   

    mengmou()mengmou() ( ) 信誉:98 比较高深 测试时报过程需要参数 '@handle' 为 'int' 类型。不知道如何做 所以作罢了。
      

  9.   

    原來是長度的問題。不過你上面的語句的確是有問題。
    如何在slq语句中 控制 字段(Title)中  显示字符的长度select Title from news -------------
    能不能說的詳細些。
      

  10.   

    也就是 通常我们用函数处理 截取字符串 的效果现在想直接在sql中解决之前有看过用这个存储过程该如何解决?请高手指点谢谢
      

  11.   

    paoluo(一天到晚游泳的鱼) ( ) 信誉:100 是有问题菜菜水平啊 所以请高手多多指点
    包括 
    CREATE PROCEDURE proName
    (
     @ShowNum int,
     @SortID int
    )AS
      DECLARE @NUM INT
      SET @NUM = @ShowNum和CREATE PROCEDURE proName
    (
     @Num int,

    AS...
    这2个的区别我还没搞清楚呢有高手知道 哪里有存储过程 好教程的 麻烦告诉一下我去补习补习
      

  12.   

    testtest000() ,你上面寫的就只是賦值而已,沒有什麼啊。聯繫幫助上面的例子可以多看看。另外,如果想提高,也可以在SQL版看看別人問的帖子,自己試著多寫寫,也可以提高。
      

  13.   

    方法是直接在sql语句中处理,能实现的效果是:假设我新闻的标题是 "报名即赠SCJP考试卷,数量有限★最新Linux工程师薪资统计!半年打造赴日软件工程师年薪25万"这么长,前台只显示20个字符(截取),鼠标放上去的时候显示全部标题。就是很常见的效果,
    需要在构照sql语句的时候实现这个效果。请高手指点。--------------------另:多谢大家提示:联机帮助是个好东西
      

  14.   

    testtest000() ,我在你另外個帖子中已經回復了。你這個效果最後在前台去實現,網上有很多這樣的例子,搜下吧。
      

  15.   

    看看這樣吧。Select 新闻, Left(新闻, 20) As New新闻 From 表開始顯示New新闻字段中的值,如果鼠標移上去,就顯示新闻這個字段的值。
      

  16.   

    没必要用SQL实现,用JAVASCRIPT实现。
      

  17.   

    testtest000() ( ) 信誉:100  2007-08-06 17:04:18  得分: 0  
     
     
       作成变量呢 用存储过程写 高手演示看看  
    ---------------
    樓主描述問題的時候總是惜墨如金,最好能清晰的說明你的要求。就說個存儲過程, 輸入參數是怎樣,輸出參數是怎樣,功能也沒有太多的描述。看看這個是不是你要的。另外,還是那句話,這個東西最好放在前台去控制實現。
    --建立存儲過程
    Create ProceDure SP_TEST(@新闻 Varchar(100), @New新闻 Varchar(20) Output)
    As
    Select @New新闻 = Left(@新闻, 20)
    GO
    --調用
    Declare @新闻 Varchar(100), @New新闻 Varchar(20)
    EXEC SP_TEST 'dasdsadsaaadsadsa', @New新闻 Output
    Select @New新闻