Sql 返回varchar的过程
我试图创建一个返回varchar的函数,但我不能,因为我在内部使用CREATETABLE,当我使用过程创建它时,我不能返回值 我想知道你是否有什么建议 我这样做只是为了让电子邮件之间的间隔字符串;这样我就可以把所有经理的邮件都放在一个varchar中给收件人Sql 返回varchar的过程,sql,sql-server,tsql,stored-procedures,user-defined-functions,Sql,Sql Server,Tsql,Stored Procedures,User Defined Functions,我试图创建一个返回varchar的函数,但我不能,因为我在内部使用CREATETABLE,当我使用过程创建它时,我不能返回值 我想知道你是否有什么建议 我这样做只是为了让电子邮件之间的间隔字符串;这样我就可以把所有经理的邮件都放在一个varchar中给收件人 ALTER procedure [dbo].[Manager_email] AS BEGIN declare @mails varchar (max), @number_of_mails int,
ALTER procedure [dbo].[Manager_email]
AS
BEGIN
declare @mails varchar (max),
@number_of_mails int,
@counter int
set @counter=2
create table #temp ( id int identity, email varchar(30))
insert into #temp (email)
select Email
from hr.Employees
where lower (EmpRole) like 'manager'
set @number_of_mails=@@ROWCOUNT
set @mails = (select email from #temp where id =1 ) + ';'
while @counter <= @number_of_mails
BEGIN
set @mails = @mails + (select email from #temp where id =@counter ) + ';'
set @counter = @counter+1
END
drop table #temp
return cast (@mails as varchar (200))
END
您只能从过程返回整数值,如果要从过程返回varchar值,最好在过程中使用输出变量 范例
CREATE PROCEDURE Sales.uspGetEmployeeSalesYTD
@SalesPerson nvarchar(50),
@SalesYTD money OUTPUT
AS
SET NOCOUNT ON;
SELECT @SalesYTD = SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
WHERE LastName = @SalesPerson;
RETURN
与上面的过程类似,从过程返回@SalesYTD
您可以在MSDN上查看全文:您只能从过程返回整数值,如果您想从过程返回varchar值,最好在过程中使用输出变量 范例
CREATE PROCEDURE Sales.uspGetEmployeeSalesYTD
@SalesPerson nvarchar(50),
@SalesYTD money OUTPUT
AS
SET NOCOUNT ON;
SELECT @SalesYTD = SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
WHERE LastName = @SalesPerson;
RETURN
与上面的过程类似,从过程返回@SalesYTD
您可以查看MSDN上的完整帖子:您可以改用函数
CREATE FUNCTION Manager_email ()
RETURNS varchar(max)
AS
BEGIN
declare @email varchar(30)
declare @emails varchar(max)
set @emails = ''
declare cur cursor for
select Email
from hr.Employees
where lower (EmpRole) like 'manager'
open cur
fetch next from cur into @email
while @@fetch_status = 0
begin
set @emails = @emails + @email + ';'
fetch next from cur into @email
end
close cur
deallocate cur
return @emails
END
您可以改用函数
CREATE FUNCTION Manager_email ()
RETURNS varchar(max)
AS
BEGIN
declare @email varchar(30)
declare @emails varchar(max)
set @emails = ''
declare cur cursor for
select Email
from hr.Employees
where lower (EmpRole) like 'manager'
open cur
fetch next from cur into @email
while @@fetch_status = 0
begin
set @emails = @emails + @email + ';'
fetch next from cur into @email
end
close cur
deallocate cur
return @emails
END
可以使用表变量代替临时表。在这种情况下,您可以继续使用自定义项。您可以使用表变量而不是临时表。在这种情况下,您可以继续使用UDF。不要忘记将其标记为acceepted。如果您获得了所需的信息,您可以使用表变量而不是临时表,那么您就可以使用函数。如果您获得了所需的信息,请不要忘了将其标记为acceepted。您可以使用表变量而不是临时表,然后您可以使用函数。必须避免使用游标。您可以使用select@emails=@emails+来自人力资源部的电子邮件。员工…必须避免使用光标。您可以使用select@emails=@emails+来自人力资源部员工的电子邮件。。。