想写一个可以判断某个ID在其它表里有没有被用的函数,但一直不成功,各位有空看看吗?

miaomiaoga 2007-01-25 01:30:51
运行时提示有借。说找不到存储过程,好像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
...全文
241 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
miaomiaoga 2007-01-25
  • 打赏
  • 举报
回复
再次谢谢。现在修改函数时提示:Invalid use of 'EXECUTE' within a function.

好像说在exec不能存在于function中。。。这回郁闷了。。。:(
leo_lesley 2007-01-25
  • 打赏
  • 举报
回复

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
miaomiaoga 2007-01-25
  • 打赏
  • 举报
回复
谢谢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.)

:(....
leo_lesley 2007-01-25
  • 打赏
  • 举报
回复

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

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧