TSQL - बहु-भाग पहचानकर्ता सीमांकन त्रुटि

वोट
40
CREATE FUNCTION [dbo].[Test] (@ID INT, @VAL INT)
RETURNS @Return TABLE (ID INT, VAL INT)
AS
BEGIN
    INSERT IGNORE  INTO @Return
    SELECT @ID, @VAL
RETURN;
END
GO
DECLARE @T1 TABLE (ID INT IDENTITY(1,1), VAL INT)
DECLARE @T2 TABLE (ID INT, VAL INT)

INSERT IGNORE  INTO @T1
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL 
SELECT 4

INSERT IGNORE  INTO @T2
SELECT 1,1
UNION
SELECT 2,4
UNION
SELECT 3,3

SELECT  *
FROM    @T1 T1
LEFT JOIN @T2 T2 ON T1.[ID] = T2.[ID]
LEFT JOIN [dbo].[Test] (1, COALESCE(T2.[VAL],T1.VAL)) T ON T1.ID = T.ID
GO

DROP FUNCTION [dbo].[Test]
GO

लक्ष्य:

fx यदि उपलब्ध हो के 2 परम में T2.Val में पारित, और T1.Val में पारित करने के लिए। बदल रहा है FX परिभाषा संभव नहीं है।

मैं इस काम पाने के लिए नहीं कर पा रहे। मैं IsNull की कोशिश की और है कि या तो काम नहीं करता।

14/04/2017 को 15:18
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
3

आप एक तालिका मूल्यवान समारोह कॉल करने के लिए चाहते हैं, का उपयोग करें APPLY( OUTER APPLYइस मामले में, क्योंकि आप उपयोग कर रहे हैं LEFT JOIN):

SELECT  *
FROM @T1 T1 LEFT JOIN
     @T2 T2 
     ON T1.[ID] = T2.[ID] OUTER APPLY
     [dbo].[Test](1, COALESCE(T2.[VAL], T1.VAL) ) T;

आप एक अतिरिक्त शर्त चाहते हैं, तो एक का उपयोग WHEREखंड:

SELECT  *
FROM @T1 T1 LEFT JOIN
     @T2 T2 
     ON T1.[ID] = T2.[ID] OUTER APPLY
     [dbo].[Test](1, COALESCE(T2.[VAL], T1.VAL) ) T
WHERE t1.ID = T.ID;

यही कारण है कि पिछले हालत हालांकि, अजीब लगता है। क्यों न सिर्फ पारित T1.IDसीधे समारोह में?

14/04/2017 को 15:20
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more