想写一个可以判断某个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