Sql server 2005 在SQL函数中更新并返回另一个字符串
我想在SQL函数中更新一个字符串并返回一个字符串。 更新工作正常,但返回的字符串不起作用,当我停用sp_executesql时,函数返回值。为什么我们不能执行命令并返回不同的值。 请帮帮我 SQL函数Sql server 2005 在SQL函数中更新并返回另一个字符串,sql-server-2005,Sql Server 2005,我想在SQL函数中更新一个字符串并返回一个字符串。 更新工作正常,但返回的字符串不起作用,当我停用sp_executesql时,函数返回值。为什么我们不能执行命令并返回不同的值。 请帮帮我 SQL函数 =========================================================== set ANSI_NULLS ON set QUOTED_IDENTIFIER ON set nocount on go ============
===========================================================
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
set nocount on
go
===========================================================
ALTER FUNCTION [dbo].[autoid](@tablename varchar(max))
RETURNS varchar(max)
AS
-- Add the parameters for the stored procedure here
BEGIN
declare @str1 varchar(max)
declare @str2 varchar(max)
declare @str3 varchar(max)
declare @str4 varchar(max)
declare @str5 varchar(max)
declare @str6 varchar(max)
declare @str7 nvarchar(max)
declare @str8 int
declare @str9 int
declare @str10 int
declare @str11 int
declare @str12 int
select @str8 = IDNO from control where tablename = @tablename
select @str1 = shortname from control where tablename = @tablename
set @str3= @str1
set @str9=LEN(@str8)
set @str11=26
select @str10= @str11 - @str9
select @str12=@str8 + 1
while(@str10>0)
BEGIN
set @str1=@str1 + '0'
select @str10 = @str10 - 1
END
select @str5 = @str1 + CAST ( @str12 AS VARCHAR(10) )
set @str7='update control set IDNO = ' + CAST ( @str12 AS VARCHAR(100)) + ' where tablename = ''' + @tablename +''''
execute sp_executesql @str7
return @str5
END
====================================================================================
您需要为此使用存储过程。函数不能有副作用,包括更新表 您也不能从函数中执行存储过程(包括
sp_executesql
)(或者至少不能不借助openrowset
进行黑客攻击)
您可以使用
输出
参数从存储过程返回标量值。为什么给变量起这么不直观的名称?您能详细说明一下“不起作用”吗?结果如何?你期待什么?输入是什么?我正在尝试生成一个自动id并将其返回到另一个存储过程,在该存储过程中插入函数。通过给定一些特定变量,您不会得到错误只有函数和扩展存储过程才能从函数中执行。
?@Niranjan-当您使用执行它时,选择[dbo].[autoid]('SomeValue')
您应该会得到错误。不,它没有。我检查了,它运行得很好。但问题是这个函数没有返回值