日期:2014-05-19  浏览次数:20498 次

想写一个可以判断某个ID在其它表里有没有被用的函数,但一直不成功,各位有空看看吗?
运行时提示有借。说找不到存储过程,好像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   int

SET   @QueryString   =   'SELECT   @Return=count(*)   FROM   '   +   @TableName   +   '   WHERE   1=1  
  AND   '   +   @FieldName   +   '= ' ' '   +   @FieldValue   +   ' ' '
  '    

  if   @SearchCriteria!= ' '
  BEGIN
  set   @QueryString   =   @QueryString   +   @SearchCriteria
  END

  EXEC   @QueryString

RETURN   @Return
END


------解决方案--------------------

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 @QueryString

RETURN @Return
END

------解决方案--------------------

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