पर डालने के बाद ट्रिगर मेरे पास एक सारणी है जिसमें दो not null
कॉलम Created
और Updated
शामिल हैं।नल कॉलम
मैं इसी चलाता
ALTER TRIGGER [dbo].[tr_category_inserted] ON [dbo].[Category]
AFTER INSERT
AS
BEGIN
UPDATE Category
SET Created = GETDATE(), Updated = GETDATE()
FROM inserted
WHERE Category.ID = inserted.ID;
END
और
ALTER TRIGGER [dbo].[tr_category_updated] ON [dbo].[Category]
AFTER UPDATE
AS
BEGIN
UPDATE Category
SET Updated = GETDATE()
FROM inserted
inner join [dbo].[Category] c on c.ID = inserted.ID
END
लिखा था लेकिन अगर मैं एक नई पंक्ति सम्मिलित कर रहा हूँ मैं कोई त्रुटि मिलती है
स्तंभ में Null मूल्य सम्मिलित नहीं कर सकते 'बनाया ', तालिका ' श्रेणी '; कॉलम नल की अनुमति नहीं देता है। INSERT विफल रहता है।
सम्मिलित आदेश:
INSERT INTO [Category]([Name], [ShowInMenu], [Deleted])
VALUES ('category1', 0, 0)
मैं कैसे इन स्तंभों के लिए एक सेटिंग के बिना इस तरह चलाता लिख सकते हैं अशक्त अनुमति देने के लिए?
यदि आप 'insert' पर स्वचालित रूप से 'दिनांक' को अपडेट करना चाहते हैं, तो मैं आपको' ट्रिगर ' – DON
की बजाय' डिफ़ॉल्ट 'बाधा का उपयोग करने का सुझाव देता हूं क्योंकि त्रुटि उत्पन्न होती है क्योंकि ट्रिगर केवल प्रविष्टि के बाद काम करता है, और आप कॉलम मान नहीं डाल रहे हैं डालने के समय 'बनाया गया' और 'अपडेट किया गया'। – TechDo
जैसा कि ट्रिगर का नाम पहले से कहता है, ट्रिगर आग ** ** के बाद ** सम्मिलित हुआ है - लेकिन आपको किसी भी 'न्यूल' कॉलम के लिए 'INSERT' पर ** ** ** ** प्रदान करना होगा। तो आपको या तो उन कॉलम के प्रारंभिक मूल्य को सेट करने के लिए 'INSTEAD INSERT' ट्रिगर लिखना होगा - बहुत आसान: केवल उस कॉलम पर 'डिफॉल्ट (GETDATE())' बाधा परिभाषित करें ताकि यह स्वचालित रूप से 'INSERT पर भर जाए '.... –