2015-12-11 63 views
-2

我有一個返回VarChar(MAX)在我的存儲過程我做了標值函數這個爲什麼設置這樣一個變量會有所作爲?

declare @p_emailAddr varchar(MAX) = (select db.dbo.GetEmails(10)) 

如果我做print @p_emailAddr它讓我看到它是用正確的信息,但代碼的其餘部分填充不起作用正確使用它。 (我不知道爲什麼,它沒有任何意義!)

現在,如果我改變它像這樣

declare @p_emailAddr varchar(MAX) = '[email protected];' 

我的代碼的其餘部分完美的作品,因爲它應該!

設置@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

你能顯示'GetEmails'的代碼? –

+2

顯示GetEmails的其餘代碼+代碼(10) – lad2025

+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 protected]'), ('[email protected]') 

declare @p_emailAddr table (emails varchar(max)) 
insert into @p_emailAddr(emails) 
select * 
from #GetEmails 


select * 
from @p_emailAddr 
+0

發現問題。檢查我在OP中的最新評論,這是存儲過程和getEmails()函數之間的權限問題。 – Timmy

相關問題