डेटाबेस प्रोजेक्ट में OPENQUERY के साथ लिंक सर्वर का उपयोग करना


10

मेरे पास एक SQL Server 2008 है जो मैं डेटाबेस को TFS में फेंकना चाहता हूं। इसलिए मैंने एक Visual Studio 2013 डेटाबेस प्रोजेक्ट का उपयोग किया जहां मैंने DB को आयात किया। त्रुटियों का एक गुच्छा तय करने के बाद मैं केवल एक त्रुटि के साथ फंस गया हूं:

एक दृश्य में देवता OPENQUERYएक लिंक किए गए सर्वर का उपयोग करते थे। इसलिए मैंने एक DACPAC को आयात किया जिसमें सही डेटाबेस शामिल है और इसे Add Database Referenceनिम्नलिखित संदर्भ विकल्पों का उपयोग करके परियोजना में जोड़ा गया है ।

डेटाबेस संदर्भ के लिए सेटिंग्स

प्रारंभिक स्क्रिप्ट संस्करण

यहाँ मूल दृश्य निर्माण का एक छोटा संस्करण है:

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

इससे निम्न त्रुटि होती है:

त्रुटि 136 SQL71501: दृश्य: [dbo]। [vwStatus] में ऑब्जेक्ट के लिए एक अनसुलझे संदर्भ है [LinkedServer]।

पहला प्रयास

इसलिए मैंने सर्वर नाम चर डालने की कोशिश की

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

जिससे होता है

176 SQL46010 त्रुटि: $ (LinkedServer) के पास गलत सिंटैक्स।

आगे के प्रयास

मैंने थोड़ी सी घबराहट की और निम्नलिखित को आज़माया (उद्धृत किए बिना पहचानकर्ताओं को सक्षम किए बिना)

FROM       OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([$(LinkedServer)], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([LinkedServer], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY("LinkedServer", 'SELECT * FROM [DB].[dbo].tbStatus') AS 

मुझे हमेशा एक त्रुटि मिल रही है।

मुझे कोई सुराग नहीं है कि मैं यहां क्या देख रहा हूं। क्या आप? आपके समय के लिए धन्यवाद!

(दुख की बात है कि मैं विज़ुअल-स्टूडियो -2013 टैग नहीं जोड़ सकता, इसलिए मैंने विज़ुअल-स्टूडियो का इस्तेमाल किया)

जवाबों:


9

मैं इसे पाने में कामयाब रहा:

मैंने एक नया डेटाबेस प्रोजेक्ट बनाया master। वहाँ मैंने एक फोल्डर Server Objectऔर एक फाइल बनाई LinkedServer.sql। SQL फ़ाइल में मैंने लिंक किया हुआ सर्वर जोड़ा:

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';

डेटाबेस प्रोजेक्ट masterको मेरे समाधान में जोड़ने और मेरे मूल डेटाबेस प्रोजेक्ट में इसे संदर्भित करने के बाद , मैं प्रारंभिक सिंटैक्स का उपयोग करके प्रोजेक्ट का निर्माण करने में सक्षम था;

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

मैं अभी भी लिंक्डस्वेर के साथ एक मास्टर प्रोजेक्ट होने के बावजूद काम करने के लिए इसे प्राप्त नहीं कर सकता। एससीएल फ़ाइल वहाँ
परीक्षण

खैर, कुछ और जानकारी के बिना मदद करना कठिन है। शायद यह एक और सवाल बनाने के लिए बेहतर है। अपने समाधान में अपने मास्टर प्रोजेक्ट को संदर्भित करना महत्वपूर्ण है। अन्यथा यह मेरे लिए ठीक उसी तरह काम करता है जैसा कि वर्णित है।
Chake

आपके समाधान के भीतर - क्या आपके पास लिंक्डसेवर डीबीए के साथ एक डीएएसीपी (एस) या प्रोजेक्ट है?
मार्टिन मीसर

नमस्ते, मुझे याद नहीं है, लेकिन मैंने दूसरे पैराग्राफ में लिखा है, कि मैंने dacpacs का उपयोग किया है। लेकिन अंतिम समाधान के लिए मैंने मास्टर डीबी के लिए एक डेटाबेस परियोजना का संदर्भ दिया।
चके

1
ध्यान दें कि आपको यह सुनिश्चित करना होगा कि आपकी 'LinkedServer.sql' फ़ाइल में 'Build' के लिए सेट एक्शन है। अनायास वी.एस. एक पूर्व परिनियोजन स्क्रिप्ट से लिंक किए गए सर्वर को पहचानने के लिए प्रतीत नहीं होता है, या यह सब आवश्यक नहीं होगा।
तरण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.