@tablename,@fieldname是字串.
select * from 一个字串 是什么意思?
相当于执行
select * from 'abcde'将
select   *   from   @tablename   WHERE   @FieldName=@Val   
改为
exec('select   *   from ' +  @tablename  + ' WHERE ' +@FieldName + '=''' + @Val  + '''')

解决方案 »

  1.   

    @tablename varchar(20) -> 一个字符串变量select * from @tablename -> 这里的需要表名或表变量,不是一个字符串。要实现这种功能,不能用函数,要用存储过程:exec ('select * from '+@tablename+' WHERE '+@FieldName+'='+@Val)
      

  2.   


    CREATE         function   func_check(   @tablename   varchar(20),   @fieldname   varchar(20),   @val   varchar(20)) 
    returns   int 
    as 
    begin 
    declare   @s   nvarchar(300)  
    declare   @id   int         
    set   @s= 'select   *   from   '+@tablename+ '   WHERE   '+@FieldName+ '= '+@Val   
    exec(@s)      

    if   @@rowcount> 0 
    return   1 
    else 
             return   0 
        return   @id 
    end 
      

  3.   

    create function fun_check(@tableName varchar(20),@fieldName varchar(20),@val varchar(20))
    returns int
    as
    begin
    declare @select varchar(300)
    declare @id int
    set @select =   'select * from  '+@tableName + ' where '+  @fieldname + ' = '''+ @val+''''
    exec @select
    if @@rowcount > 0 
    set @id = 1
    else 
    set @id = 0
    return @id
    end
      

  4.   

    在函数内不正确地使用了 'EXECUTE'。
      

  5.   

    PT1314917你好:
      執行你的代碼為什麼會出現"在函数内不正确地使用了   'EXECUTE '"
      

  6.   

    函数内不能使用exec、普通存储过程及不确定值函数
      

  7.   

    CREATE  PROC func_check
    (  
    @tablename   varchar(20),   
    @fieldname   varchar(20),   
    @val   varchar(20)

    as 
    begin 
    declare   @select   varchar(8000) 
    declare   @id   int 
    set   @select   ='select   *   from '+@tableName+' where '+@fieldname+'='''+@val+''''exec (@select)   --执行语句
    if   @@rowcount   >   0   
    set   @id   =   1 
    else   
    set   @id   =   0 return   @id --返回过程值end
      

  8.   

    hyjsmeng 你好:
       執行你的代碼的在檢測語法的時候沒有問題。但在調用的時候會出錯,提示找不預存程序。我調用程序的代碼如下:
    procedure TForm1.SpeedButton7Click(Sender: TObject);
    var
      ADOTest:TAdoquery;
      s:string;
    begin
      s:=trim(DBEdit1.text);
      ADOTest:=TADOQuery.Create(nil);
      with ADOTest do
      begin
         close;
         sql.Clear;
         connection:=form1.ADOConnection1;
         showmessage('select odb.fun_check(''boma'',''ma01'','''+s+''')');
         sql.Add('select dbo.fun_check(''boma'',''ma01'','''+s+''')');
         open;
      end;
      if adotest.Fields[0].value=1 then
      begin
         application.MessageBox('記錄已經存在','信息提示',mrok);
         abort;
      end;
    end;
    請幫我看一下,問題出在那里.謝謝!