运行时提示有借。说找不到存储过程,好像exec xxx就是执行一个外部的存储过程,但其实用函数能不能做到我想做的东西呢?
用法:
select dbo.Func_UsingInAnotherTable('ta_user','user_id','100000000001','')
其实就是要找在ta_user这个表里,有没有列user_id等于100000000001的记录。有的话就证明就个值已经被用了。函数:
ALTER FUNCTION [dbo].[Func_UsingInAnotherTable]
(    
 @TableName nvarchar (250),
 @FieldName nvarchar (250),
 @FieldValue nvarchar (250),
 @SearchCriteria nvarchar(4000)
)
RETURNS NUMERIC(18)   
AS
BEGIN
 DECLARE @QueryString nvarchar(4000) 
 DECLARE @Return as intSET @QueryString = 'SELECT @Return=count(*) FROM ' + @TableName + ' WHERE 1=1 
 AND ' + @FieldName + '=''' + @FieldValue + '''
 '   if @SearchCriteria!=''
 BEGIN
 set @QueryString = @QueryString + @SearchCriteria
 END EXEC @QueryStringRETURN @Return
END

解决方案 »

  1.   


    ALTER FUNCTION [dbo].[Func_UsingInAnotherTable]
    (    
     @TableName nvarchar (250),
     @FieldName nvarchar (250),
     @FieldValue nvarchar (250),
     @SearchCriteria nvarchar(4000)
    )
    RETURNS NUMERIC(18)   
    AS
    BEGIN
      DECLARE @QueryString nvarchar(4000) 
      DECLARE @Return as int SET @QueryString = 'SELECT '+@Return+'=count(*) FROM ' + @TableName + ' WHERE 1=1 AND ' + @FieldName + '=''' + @FieldValue + ''''    /*  这句有什么用
    if @SearchCriteria!=''
      BEGIN
      set @QueryString = @QueryString + @SearchCriteria
      END
    */
      EXEC @QueryStringRETURN @Return
    END
      

  2.   

    谢谢leo_lesley(leo)兄的回答。这个函数在运行时就有错了。然后我改了一下:SET @QueryString = 'SELECT '+ convert(varchar(400),@Return) +'=count(*) FROM ' + @TableName + ' WHERE 1=1 AND ' + @FieldName + '=''' + @FieldValue + ''''  然后再选择,但是提示:
    Msg 2812, Level 16, State 62, Procedure Func_UsingInAnotherTable, Line 22
    Could not find stored procedure ''.(因为不改的话一运行就会提示:Syntax error converting the varchar value 'SELECT ' to a column of data type int.):(....
      

  3.   


    ALTER FUNCTION [dbo].[Func_UsingInAnotherTable]
    (    
     @TableName nvarchar (250),
     @FieldName nvarchar (250),
     @FieldValue nvarchar (250),
     @SearchCriteria nvarchar(4000)
    )
    RETURNS NUMERIC(18)   
    AS
    BEGIN
      DECLARE @QueryString nvarchar(4000) 
      DECLARE @Return as int SET @QueryString = 'SELECT '+STR(@Return)+'=count(*) FROM ' + @TableName + ' WHERE 1=1 AND ' + @FieldName + '=''' + @FieldValue + ''''    EXEC (@QueryString)RETURN @Return
    END
      

  4.   

    再次谢谢。现在修改函数时提示:Invalid use of 'EXECUTE' within a function.好像说在exec不能存在于function中这回郁闷了:(