CREATE FUNCTION GetCIshu  (@job_no AS VARCHAR (20), @NOID AS DECIMAL (10),@tablename AS VARCHAR(20) )  
RETURNS decimal (2)  AS  
BEGIN 
       DECLARE  @II    AS DECIMAL (2)
       DECLARE  @CISHU AS DECIMAL (2)
       DECLARE  @NOID2  AS DECIMAL (10)
       SET @II=0
       DECLARE CURNOID CURSOR FOR SELECT NOID FROM '+@tablename+'  WITH (NOLOCK) WHERE JOB_NO=@JOB_NO
       OPEN CURNOID
      FETCH NEXT FROM CURNOID INTO @ NOID2
       WHILE @@FETCH_STATUS = 0
                   
                   BEGIN
                            SET @II=@II+1
                             IF @NOID2=@NOID
                                  SET @CISHU=@II
                   FETCH NEXT FROM CURNOID INTO @ NOID2
                   END         CLOSE CURNOID
         DEALLOCATE CURNOID
         return @CISHU
END

解决方案 »

  1.   

     SELECT NOID FROM '+@tablename+'  WITH (NOLOCK) WHERE JOB_NO=@JOB_NO 这个是要动态执行的,函数里面不行,改存储过程
      

  2.   

    DECLARE CURNOID CURSOR FOR SELECT NOID FROM '+@tablename+'  WITH (NOLOCK) WHERE JOB_NO=@JOB_NO 
    这个语句搁哪都通不过,另字符串拼接动态语句不能在函数中用,改用存储过程
      

  3.   

    你这个编译都通不过。
    这样试试。CREATE FUNCTION GetCIshu  (@job_no AS VARCHAR (20), @NOID AS DECIMAL (10),@tablename AS VARCHAR(20) ) 
    RETURNS decimal (2)  AS 
    BEGIN
          DECLARE  @II    AS DECIMAL (2)
          DECLARE  @CISHU AS DECIMAL (2)
          DECLARE  @NOID2  AS DECIMAL (10)
          SET @II=0
      EXEC('SELECT * INTO #TEMP FROM '+@tablename)
          DECLARE CURNOID CURSOR FOR SELECT NOID FROM #TEMP  WITH (NOLOCK) WHERE JOB_NO=@JOB_NO
          OPEN CURNOID
          FETCH NEXT FROM CURNOID INTO @NOID2
          WHILE @@FETCH_STATUS = 0
                     
                      BEGIN
                                SET @II=@II+1
                                IF @NOID2=@NOID
                                      SET @CISHU=@II
                      FETCH NEXT FROM CURNOID INTO @NOID2
                      END        CLOSE CURNOID
            DEALLOCATE CURNOID
            return @CISHU
    END 
      

  4.   

    把 SELECT NOID FROM '+@tablename+'  WITH (NOLOCK) WHERE JOB_NO=@JOB_NO 
    改为 SELECT NOID FROM tablename  WITH (NOLOCK) WHERE JOB_NO=@JOB_NO ,其中tablename是常量 还是不行啊
      

  5.   

    @ NOID2 这个东东不要分开喽
      

  6.   

    我的是SQL2000
    你的这个提示"无法从函数中访问临时表"
      

  7.   

    搞定了,我把'+@tablename+' 换为 表名 不用变量了还有个问题是 @ NOID2  分开了