2009-09-30 12 views
11

मैं किसी शर्त के आधार पर तालिका चर के अंदर एक कॉलम को अपडेट करने का प्रयास कर रहा हूं, यह स्थिति यह है कि तालिका चर की आईडी एक अलग तालिका में मौजूद नहीं है:एक मौजूदा कथन के अंदर तालिका चर का उपयोग

DECLARE @BugRep TABLE(BugCode VARCHAR(50),DevFirstName VARCHAR(50), DevLastName VARCHAR(50), BugDate VARCHAR(20), IsValid VARCHAR(1)) 

UPDATE @BugRep 
SET IsValid = 'N' WHERE NOT EXISTS(SELECT * FROM BUG b WHERE @BugRep.BUGCODE = b.CODE) 

जब मैं प्रक्रिया इन बयानों है कि संकलित करने के लिए प्रयास करते हैं, मैं एक "अदिश चर घोषित करना चाहिए" @BugRep "संदेश मिलता है।

मैं कैसे के अंदर तालिका चर का उपयोग कर के बारे में जाते हो मौजूद नहीं खंड

मैं SQL सर्वर 2 का उपयोग कर रहा हूँ 008

उत्तर

13

यह काम करेगा:

[@BugRep].BUGCODE 

तुम भी माध्यम से "b.CODE" से "b.BUGCODE" को बदलना होगा;)

7

यह वास्तव में बहुत picky है । गर्भ के सुझाव का उपयोग करके नीचे दी गई इन-लाइन टिप्पणियां देखें और बाएं आउटर जॉइन की कोशिश भी करें।

CREATE TABLE Bug (CODE VARCHAR(50)) 

DECLARE @BugRep TABLE (
    BugCode   VARCHAR(50), 
    --DevFirstName VARCHAR(50), 
    --DevLastName  VARCHAR(50), 
    --BugDate   VARCHAR(20), 
    IsValid   CHAR(1) 
) 

INSERT INTO Bug (CODE) VALUES ('Code1'), ('Code2'), ('Code3') 

INSERT INTO @BugRep (BugCode) VALUES ('Code1'), ('Code2'), ('Code4') 

SELECT CODE FROM Bug ORDER BY CODE 
SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode 

UPDATE @BugRep       -- Can't be [@BugRep] ("Invalid object name '@BugRep'.") 
SET IsValid = 'N' 
WHERE NOT EXISTS (
    SELECT * 
    FROM BUG b 
    WHERE [@BugRep].BUGCODE = b.CODE -- Can't be @BugRep ("Must declare the scalar variable "@BugRep".") 
) 

SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode 

UPDATE @BugRep       -- Can be either @BugRep or [@BugRep] 
SET IsValid = 'Y' 
FROM @BugRep       -- Can't be [@BugRep] ("Invalid object name '@BugRep'.") 
LEFT OUTER JOIN BUG 
ON [@BugRep].BUGCODE = BUG.CODE   -- Can't be @BugRep ("Must declare the scalar variable "@BugRep".") 
WHERE BUG.CODE IS NOT NULL 

SELECT BugCode, IsValid FROM @BugRep ORDER BY BugCode 

DROP TABLE Bug 
GO 
+0

+1, अच्छा नमूना कोड –

+2

मैन .. यह कितना परेशान है, आह? +1 – womp

+0

आह, @ बुगकोड, उपनाम के रूप में उपयोग किया जाता है, ब्रैकेट के बिना एक अवैध पहचानकर्ता है। बेशक! –

1

यहाँ अपने समस्या के समाधान पाने के लिए पिछले दो उपनाम का उपयोग करने का एक संस्करण है:

UPDATE @BugRep 
SET IsValid = 'N' 
FROM @BugRep BR 
    LEFT JOIN BUG B 
     ON BR.BUGCode = B.CODE 
WHERE B.CODE is null 

यह भी करने के लिए संबंधित अक्षमताओं से बचा जाता है "शून्य नहीं है" और "मौजूद नहीं"।