जहां चयन रिकॉर्ड वापस करेगा, आईएनएसईआरटी प्रभावित रिकॉर्ड की गिनती को छोड़कर परिणाम सेट वापस नहीं करेगा। इसे सेट एनओसीटीटी का उपयोग करके दबाया जा सकता है; हालांकि, मुझे यकीन नहीं है कि क्या दमन दृश्यता या पंक्ति गणना वास्तव में आ रहा है।
INSERT INTO OPENQUERY(MYSERVER, 'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [Blah].[dbo].[SQL_Drives]')
SELECT 'X', 2, 'MyServer'
(1 row(s) affected)
रिकॉर्ड के लिए के रूप में एक आउटपुट खंड का उपयोग करने, सम्मिलित करें से लौटे जा रहा है कि ऐसा करने के लिए एक ही रास्ता है। क्लाइंट मशीन को आउटपुट पंक्तियों तक पहुंच नहीं होगी, इसलिए उन्हें वापस नहीं किया जा सकता है। आप निम्नलिखित चलाने का प्रयास करते हैं, तो आपको एक त्रुटि प्राप्त होगा:
INSERT INTO OPENQUERY(MYSERVER, 'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [BLAH].[dbo].[SQL_Drives]')
OUTPUT INSERTED.*
SELECT 'X', 2, 'MyServer'
Msg 405, Level 16, State 1, Line 1
A remote table cannot be used as a DML target in a statement which includes an OUTPUT clause or a nested DML statement.
-- EDIT RESULTS OF PROFILER ---------------------------
-- Statements that occured on server called through OPENQUERY
exec sp_cursoropen @p1 output,N'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [MyServer].[dbo].[SQL_Drives]',@p3 output,@p4 output,@p5 output
select @p1, @p3, @p4, @p5
exec sp_cursor 180150009,4,0,N'[MyServer].[dbo].[SQL_Drives]',@Drive_Letter='X',@MBFree=2,@Server='MyServer'
--Statements that occured on client
INSERT INTO OPENQUERY(MyServer, 'SELECT [Drive_Letter] ,[MBFree],[Server] FROM [MyServer].[dbo].[SQL_Drives]')
SELECT 'X', 2, 'MyServer'
बस एफवाईआई: दूसरे उदाहरण में चार भाग नामकरण वाक्यविन्यास केवल तभी काम करता है जब लिंक किए गए सर्वर प्रकार को वितरित लेनदेन में नामांकित किया गया हो। (अधिकांश हैं, सिर्फ एक गोचा।) –
अपनी पहली क्वेरी के साथ, आप कॉलम को किसी चयन के माध्यम से कॉलम निर्दिष्ट किए बिना डालने का निर्धारण कैसे कर रहे हैं? – Abs
मैं पहचान डेटा या डिफ़ॉल्ट डेटा के साथ कॉलम को छोड़कर पूरी तरह से सम्मिलित करता हूं (अधिकांश बार मैं डिफ़ॉल्ट डेटा भी लिखता हूं)। आम तौर पर पूरे रिकॉर्डसेट को सम्मिलित करने के लिए तेज़ होता है क्योंकि यह इसे डेटा के एक हिस्से के रूप में लिखता है। ओपनक्वेरी मान लेता है कि कोल्स डालने वाले क्रम में हैं (सामान्य डालने के रूप में)। सच है: यदि आपको लगातार निरंतर कॉलों को निर्दिष्ट करने की आवश्यकता है, तो आपको चयन का उपयोग करने की आवश्यकता है, लेकिन प्रदर्शन की लागत पर – Zelloss