Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 在SQL函数中更新并返回另一个字符串_Sql Server 2005 - Fatal编程技术网

Sql server 2005 在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 ============

我想在SQL函数中更新一个字符串并返回一个字符串。 更新工作正常,但返回的字符串不起作用,当我停用sp_executesql时,函数返回值。为什么我们不能执行命令并返回不同的值。 请帮帮我 SQL函数

===========================================================
    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')
您应该会得到错误。不,它没有。我检查了,它运行得很好。但问题是这个函数没有返回值