2010-05-26 11 views
6

की आवश्यकता है मैंने एक ट्रिगर लिखा है।विषम प्रश्नों के लिए ANSI_NULLS

USE [TEST] 
GO 
/****** Object: Trigger [dbo].[TR_POSTGRESQL_UPDATE_YC] Script Date: 05/26/2010 08:54:03 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER TRIGGER [dbo].[TR_POSTGRESQL_UPDATE_YC] ON [dbo].[BCT_CNTR_EVENTS] 

FOR INSERT 
AS 
BEGIN 


DECLARE @MOVE_TIME varchar(14); 
DECLARE @MOVE_TIME_FORMATED varchar(20); 
DECLARE @RELEASE_NOTE varchar(32); 
DECLARE @CMR_NUMBER varchar(15); 
DECLARE @MOVE_TYPE varchar(2); 

SELECT @MOVE_TIME = inserted.move_time 
     ,@MOVE_TYPE = inserted.move_type 
     ,@RELEASE_NOTE = inserted.release_note 
     ,@CMR_NUMBER = inserted.cmr_number FROM inserted 


IF(@MOVE_TYPE = 'YC') 
    BEGIN 

    SET @MOVE_TIME_FORMATED = SUBSTRING(@MOVE_TIME,1,4) + '-' + SUBSTRING(@MOVE_TIME,5,2) + '-' + SUBSTRING(@MOVE_TIME,7,2) + ' 00:00:00' 

    --UPDATE OpenQuery(POSTGRESQL_SERV,'SELECT visit_cmr,visit_timestamp,visit_pin FROM VISIT') 
    --  SET visit_cmr = @RELEASE_NOTE 
    --  WHERE visit_timestamp = @MOVE_TIME_FORMATED 
    --  AND visit_pin = right(@CMR_NUMBER,5) 
    --  AND visit_cmr IS NULL 

    END 

    SET NOCOUNT ON; 
END 

जब मैंने पंक्ति डालने का प्रयास किया, तो मुझे एक त्रुटि मिली है।

विषम प्रश्नों की आवश्यकता होती है ANSI_NULLS और ANSI_WARNINGS विकल्पों कनेक्शन के लिए स्थापित किया जाना। यह लगातार क्वेरी semantics सुनिश्चित करता है। इन विकल्पों को सक्षम करें और फिर अपनी क्वेरी को पुन: जारी करें।

इसके बाद मैंने SET SET ANSI_WARNINGS is ON का उपयोग करने का प्रयास किया है, हालांकि यह काम नहीं करता है। (लिंक किए गए सर्वर PostgreSQL के लिए एक ट्रिगर)

+0

एक ही त्रुटि का उपयोग करने के लिए जब करने के लिए "ऑन" सेट ट्रिगर में? – gbn

+0

वाक्यविन्यास ठीक है। मैंने अपने स्थानीय सर्वर पर एक परीक्षण 'ट्रिगर' किया - यह एक अच्छा काम है! लेकिन वास्तविक सर्वर पर। यह मुझे पंक्ति डालने के लिए एक त्रुटि (मैंने PHP अनुप्रयोग का उपयोग किया) दिया है। ** विषम क्वेरी के लिए कनेक्शन के लिए सेट करने के लिए ANSI_NULLS और ANSI_WARNINGS विकल्पों की आवश्यकता होती है। यह लगातार क्वेरी semantics सुनिश्चित करता है। इन विकल्पों को सक्षम करें और फिर अपनी क्वेरी को दोबारा जारी करें। ** – Dezigo

उत्तर

8

कोशिश यह

GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER TRIGGER [dbo].[TR_POSTGRESQL_UPDATE_YC] ON [dbo].[BCT_CNTR_EVENTS] 

AFTER INSERT 
AS 
BEGIN 


DECLARE @MOVE_TIME varchar(14); 
DECLARE @MOVE_TIME_FORMATED varchar(20); 
DECLARE @RELEASE_NOTE varchar(32); 
DECLARE @CMR_NUMBER varchar(15); 
DECLARE @MOVE_TYPE varchar(2); 

SELECT @MOVE_TIME = inserted.move_time 
     ,@MOVE_TYPE = inserted.move_type 
     ,@RELEASE_NOTE = inserted.release_note 
     ,@CMR_NUMBER = inserted.cmr_number FROM inserted 


IF(@MOVE_TYPE = 'YT') 
    BEGIN 

    SET @MOVE_TIME_FORMATED = SUBSTRING(@MOVE_TIME,1,4) + '-' + SUBSTRING(@MOVE_TIME,5,2) + '-' + SUBSTRING(@MOVE_TIME,7,2) + ' 00:00:00' 

    SET ANSI_NULLS ON 
    SET ANSI_WARNINGS ON 

    UPDATE OpenQuery(POSTGRESQL_SERV,'SELECT visit_cmr,visit_timestamp,visit_pin FROM VISIT') 
      SET visit_cmr = @RELEASE_NOTE 
      WHERE visit_timestamp = @MOVE_TIME_FORMATED 
      AND visit_pin = right(@CMR_NUMBER,5) 
      AND visit_cmr IS NULL 

    END 

    SET NOCOUNT ON; 
END 
संबंधित मुद्दे