2008-09-24 5 views
50

यदि मुझे एक SQL सर्वर से दूसरे में संग्रहीत प्रक्रिया (एसपी) की प्रतिलिपि बनाने की आवश्यकता है, तो मैं एसएसएमएस में एसपी पर राइट क्लिक करता हूं और स्क्रिप्ट संग्रहित प्रक्रिया का चयन>> नई क्वेरी संपादक विंडो के रूप में चुनें। मैं फिर उस विंडो पर राइट क्लिक करके कनेक्शन बदलता हूं और कनेक्शन> चेंज कनेक्शन ... और फिर नए सर्वर पर बनाने के लिए नया सर्वर और F5 चुनकर चयन करता हूं।किसी अन्य SQL सर्वर से कनेक्ट करने के लिए टी-एसक्यूएल वाक्यविन्यास क्या है?

तो मेरा सवाल है "अन्य SQL सर्वर से कनेक्ट करने के लिए टी-एसक्यूएल वाक्यविन्यास क्या है?" ताकि मैं इसे बनाने के लिए इसे स्क्रिप्ट स्क्रिप्ट और F5 के शीर्ष पर पेस्ट कर सकूं और यह नए सर्वर पर स्विच करेगा और निर्माण स्क्रिप्ट चलाएगा।

प्रश्न टाइप करते समय मुझे एहसास हुआ कि अगर मैंने आपको ऐसा करने की कोशिश कर रहा हूं, तो मैं आपको वापस करने के लिए एक तेज़ और बेहतर तरीके से आ सकता हूं।

उत्तर

47

, जब आप लिंक किए गए सर्वर से जुड़े क्वेरी लिखने के लिए सुनिश्चित करें, तो आप इस तरह ब्रैकेट शामिल कम से कम 2000/2005 पर [] ब्रैकेट आवश्यक हैं, कम से कम सर्वर नाम के आसपास।

2

किसी लिंक किए गए सर्वर (जो आप sp_addlinkedserver साथ कर सकते हैं) बनाने और फिर का उपयोग कर OPENQUERY

+0

वेन - अगर मैं आपके सुझाव को सही ढंग से समझता हूं तो यह सर्वर 2 पर सर्वर 1 पर रहने वाले एसपी को सही करता है? यह सर्वर 2 पर एक ही एसपी नहीं बनाता है? – Guy

+0

यह सर्वर 1 पर एक एसपी निष्पादित करता है जो सर्वर 2 के लिए एक लिंक खोलता है। फिर आप किसी क्वेरी के माध्यम से पासा कर सकते हैं या सर्वर 2 पर कुछ कॉल कर सकते हैं। – Wayne

27

अद्यतन की कोशिश: एक और एसक्यूएल सर्वर से कनेक्ट और एसक्यूएल बयान को क्रियान्वित करने के लिए, आप sqlcmd Utility उपयोग करना होगा। यह आमतौर पर बैच फ़ाइल में किया जाता है। यदि आप प्रबंधन स्टूडियो में इसे निष्पादित करना चाहते हैं तो आप इसे xmp_cmdshell से जोड़ सकते हैं।


एक तरीका linked server को कॉन्फ़िगर करना है। तो आप लिंक किए गए सर्वर और डेटाबेस नाम को टेबल नाम में जोड़ सकते हैं।

SELECT * FROM [LinkedServer].[RemoteDatabase].[User].[Table] 

मैंने पाया: इसके अलावा (linkedserver.database.dbo.TableName से * का चयन करें)

USE master 
GO 
EXEC sp_addlinkedserver 
    'SEATTLESales', 
    N'SQL Server' 
GO 
+0

यह वास्तव में विशिष्ट प्रश्न का सही उत्तर है। या, पहले, आप सुनिश्चित करते हैं कि अन्य सर्वर जुड़ा हुआ है और इसलिए क्वेरी करने योग्य है, तो आप अन्य सर्वर का चयन कर सकते हैं क्योंकि कोडवेयर बताते हैं। – mahalie

5

यदि मैं प्रश्न को पारदर्शी करना चाहता था - क्या डीडीएल में क्वेरी निष्पादन के लिए सर्वर संदर्भ चुनना संभव है - उत्तर नहीं है। केवल डेटाबेस संदर्भ प्रोग्राम के साथ यूएसई के साथ चुना जा सकता है। (पहले ही सर्वर संदर्भ को पूर्व निर्धारित कर चुके हैं)

लिंक किए गए सर्वर और खुले QUERY डीडीएल तक पहुंच प्रदान कर सकते हैं, लेकिन स्ट्रिंग के रूप में encapsulate करने के लिए आपके कोड की कुछ हद तक पुनः लिखना आवश्यक है - जिससे इसे विकसित/डीबग करना मुश्किल हो जाता है।

वैकल्पिक रूप से आप ओपन QUERY के माध्यम से दूरस्थ सर्वर को भेजने के लिए SQL फ़ाइलों को लेने के लिए बाहरी ड्राइवर प्रोग्राम का सहारा ले सकते हैं। हालांकि ज्यादातर मामलों में आप डीडीएल का मूल्यांकन करने के लिए सीधे पहले स्थान पर सर्वर से कनेक्ट हो सकते हैं।

0

यदि संभव हो, तो एसएसआईएस (एसक्यूएल सर्वर एकीकरण सेवाएं) देखें। मैं सिर्फ इस टूलकिट के साथ अपने पैरों को गीला कर रहा हूं, लेकिन पहले से ही 40+ से अधिक सर्वरों को लूप कर रहा हूं और सभी प्रकार के विनाश को खत्म करने की तैयारी कर रहा हूं;)

+1

वह वास्तव में अपने प्रश्न का उत्तर नहीं देता है। –

73

SQL सर्वर प्रबंधन स्टूडियो में, क्वेरी मेनू से SQLCMD मोड चालू करें। फिर नीचे

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password] 

आदेश में अपनी स्क्रिप्ट के शीर्ष, प्रकार आप एक से अधिक सर्वर से कनेक्ट कर रहे हैं, कनेक्शन के बीच GO अवश्य डालें पर; otherwise your T-SQL won't execute on the server you're thinking it will.

+3

यदि आप एकाधिक सर्वर से कनेक्ट कर रहे हैं तो आपको सर्वर स्विच करने से पहले 'जाओ' जोड़ना चाहिए, या आपके SQL स्टेटमेंट गलत सर्वर के विरुद्ध चलेंगे। http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx –

4

जब भी हम किसी अन्य सर्वर से किसी भी डेटा को पुनर्प्राप्त करने का प्रयास कर रहे हैं तो हमें दो चरणों की आवश्यकता है।

प्रथम चरण:

-- Server one scalar variable 
DECLARE @SERVER VARCHAR(MAX) 
--Oracle is the server to which we want to connect 
EXEC SP_ADDLINKEDSERVER @SERVER='ORACLE' 

दूसरा कदम:

--DBO is the owner name to know table owner name execute (SP_HELP TABLENAME)  
SELECT * INTO DESTINATION_TABLE_NAME 
FROM ORACLE.SOURCE_DATABASENAME.DBO.SOURCE_TABLE 
2

आप एक से अधिक सर्वर से कनेक्ट रहे हैं, तो आप जोड़ना चाहिए एक स्विचिंग सर्वर से पहले 'गो', या अपने एसक्यूएल बयान के खिलाफ चलेगा गलत सर्वर

उदा।

:CONNECT SERVER1 
Select * from Table 
GO 
enter code here 
:CONNECT SERVER1 
Select * from Table 
GO 

http://www.sqlmatters.com/Articles/Changing%20the%20SQL%20Server%20connection%20within%20an%20SSMS%20Query%20Windows%20using%20SQLCMD%20Mode.aspx

+0

(1) SQLCMD मोड, (2)) 'कनेक्ट करें', (3) 'उपयोग', (4) 'चयन करें'। –

1

मेरी सी ड्राइव पर मैं पहली बार एक नई तालिका बनाने के लिए एक txt फ़ाइल बनाएँ। आप इस मामले पाठ फ़ाइल "Bedrijf.txt"

सामग्री कहा जाता है में इस पाठ फ़ाइल

में आप क्या कभी आप चाहते का उपयोग कर सकते हैं:

Print 'START(A) create table' 

GO 1 

If not EXISTS 
(
    SELECT * 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME = 'Bedrijf' 
) 
BEGIN 
CREATE TABLE [dbo].[Bedrijf] (
[IDBedrijf] [varchar] (38) NOT NULL , 
[logo] [varbinary] (max) NULL , 
[VolledigeHandelsnaam] [varchar] (100) NULL 
) ON [PRIMARY] 

यह बचाने

तो मैं "Bedrijf.bat" नाम और एक्सटेंशन बल्ले के साथ एक अन्य txt फ़ाइल बनाएं।

OSQL.EXE -U Username -P Password -S IPaddress -i C:Bedrijf.txt -o C:Bedrijf.out -d myDatabaseName 

यह बचाने और अन्वेषक डबल क्लिक से निष्पादित करने के लिए

परिणाम नाम "Bedrijf.out"

यह

के साथ अपने सी ड्राइव पर एक txt फ़ाइल में सहेज लिया जाएगा: यह सामग्री दी गई है

1> 2> 3> START(A) create table 

से पता चलता है, तो सब कुछ ठीक

मैं है कि हो जाता है टी

संबंधित मुद्दे