我有一个标量值函数返回VarChar(MAX)
在我的存储过程中,我这样做
declare @p_emailAddr varchar(MAX) = (select db.dbo.GetEmails(10))
如果我print @p_emailAddr
它显示我填充了正确的信息,但其余代码无法正常使用它。 (我不知道为什么,它没有意义!)
现在,如果我像这样改变它
declare @p_emailAddr varchar(MAX) = 'test@email.com;'
我的其余代码完美应用!
设置@p_emailAddr
的两种方法之间有什么区别?
这是获取电子邮件代码
ALTER FUNCTION [dbo].[GetEmails](@p_SubID int)
RETURNS varchar(max)
AS
BEGIN
DECLARE @p_Emails varchar(max)
SELECT @p_Emails = COALESCE(@p_Emails + ';', '') + E.EmailAddress
FROM db.dbo.UserEmailAddr E JOIN
db.dbo.EmailSubscriptionUsers S on e.ClockNumber = s.Clock AND S.SubID = @p_SubID
SET @p_Emails = @p_Emails + ';'
RETURN @p_Emails
END
答案 0 :(得分:0)
来自GetEmails(10)的回复是什么? varchar(max)是一个字符串值,期望一个值。您可以拥有一个表变量,或者如果dbo.getemails(10)是一个表,只需将它加入到您希望使用@p_emailaddr的位置
最好的
select *
from table1 t1
join dbo.GetEmails(10) e
on e.email = t1.email
替代
create table #GetEmails (emails varchar(max))
insert into #GetEmails values ('email@test.com'), ('test@email.com')
declare @p_emailAddr table (emails varchar(max))
insert into @p_emailAddr(emails)
select *
from #GetEmails
select *
from @p_emailAddr