এসকিউএল সার্ভারের লিঙ্কযুক্ত সার্ভারের উদাহরণ ক্যোয়ারী


94

ম্যানেজমেন্ট স্টুডিওতে থাকাকালীন, আমি দুটি লিঙ্কযুক্ত সার্ভারের মধ্যে একটি কোয়েরি চালানোর / চেষ্টা করার চেষ্টা করছি। লিঙ্কযুক্ত ডিবি সার্ভার ব্যবহার করে এটি কি সঠিক বাক্য গঠন:

select foo.id 
from databaseserver1.db1.table1 foo, 
     databaseserver2.db1.table1 bar 
where foo.name=bar.name

মূলত, আপনি কেবল db.table ডিবি সার্ভারের নামটি উপস্থাপন করেন?

উত্তর:


188

ফর্ম্যাটটি সম্ভবত হওয়া উচিত:

<server>.<database>.<schema>.<table>

উদাহরণস্বরূপ: ডাটাবেস সার্ভার 1.db1.dbo.table1


আপডেট : আমি জানি এটি একটি পুরানো প্রশ্ন এবং আমার উত্তর সঠিক is তবে আমি মনে করি যে এ নিয়ে হোঁচট খাচ্ছে অন্য কারও কিছু জিনিস জানা উচিত।

যথা, সংযুক্ত পরিস্থিতিতে কোনও লিঙ্কযুক্ত সার্ভারের বিরুদ্ধে জিজ্ঞাসা করার সময় লিঙ্কযুক্ত সার্ভার থেকে ENTRE টেবিলটি সম্ভবত সার্ভারে ডাউনলোড হয়ে যাবে যাচাইয়ের ক্রিয়াকলাপটি সম্পাদনের জন্য কোয়েরিটি কার্যকর করা হচ্ছে। ওপি এর ক্ষেত্রে, উভয় table1থেকে DB1এবং table1থেকে DB2সার্ভার ক্যোয়ারী, সম্ভবতঃ নামে নির্বাহ তাদের সম্পূর্ণতা স্থানান্তরিত হবে DB3

আপনার কাছে যদি বড় টেবিল থাকে তবে এর ফলে এমন একটি অপারেশন হতে পারে যা কার্যকর করতে দীর্ঘ সময় নেয় takes সর্বোপরি এটি এখন নেটওয়ার্ক ট্র্যাফিক গতি দ্বারা সীমাবদ্ধ যা মেমরি বা এমনকি ডিস্ক স্থানান্তর গতির চেয়ে ধীর গতির অর্ডার।

যদি সম্ভব হয়, কোনও টেম্প টেবিলের মধ্যে আপনার প্রয়োজনীয় ডেটাটি টানতে স্থানীয় টেবিলটিতে যোগদান না করে দূরবর্তী সার্ভারের বিরুদ্ধে একক কোয়েরি করুন। তারপরে জিজ্ঞাসা করুন।

যদি এটি সম্ভব না হয় তবে আপনাকে বিভিন্ন বিষয় সন্ধান করতে হবে যার ফলে এসকিউএল সার্ভারকে স্থানীয়ভাবে পুরো টেবিলটি লোড করতে হবে। উদাহরণস্বরূপ ব্যবহার GETDATE()বা এমনকি কিছু যোগ দেয়। অন্যদের পারফরম্যান্স কিলারগুলির মধ্যে যথাযথ অধিকার না দেওয়া অন্তর্ভুক্ত।

আরও কিছু তথ্যের জন্য http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ দেখুন ।



4
@ বিএমডব্লিউ १२১৮: আরও ভাল, ডাবল কোট ব্যবহার করুন: এটি মাইক্রোসফ্টের স্কোয়ার ব্র্যাকেটগুলির বিপরীতে প্রায় প্রতিটি প্ল্যাটফর্ম দ্বারা সমর্থিত।

4
যখন ডাটাবেস সার্ভারের নামটিতে একটি সময়সীমা থাকে তখন আপনাকে স্কোয়ার বন্ধনী বা ডাবল উদ্ধৃতিও ব্যবহার করতে হবে।
ডেভিড ব্রুনো

4
আপনি যদি কোনও যোগ্যতার বিষয়ে অনিশ্চিত থাকেন তবে এসএসএমএস অবজেক্ট এক্সপ্লোরারের কোনও লিঙ্কযুক্ত সার্ভারের একটি টেবিলের কাছে ড্রিল করুন, ডান ক্লিক করুন এবং স্ক্রিপ্ট টেবিল হিসাবে, নির্বাচন করুন, এবং নতুন অনুসন্ধান সম্পাদক উইন্ডো। ফলাফলের নির্বাচনী বিবৃতিতে সঠিক, পুরোপুরি যোগ্যতার সাথে টেবিলের পথ অন্তর্ভুক্ত করা হবে। সিবাসে কাজ করার ক্ষেত্রে আমার কাছে একটি রহস্য ডাটাবেস কোয়ালিফায়ার ছিল এবং এটি আমাকে সঠিক নাম দিয়েছে।
জন মো

আমি মনে করি আপনি পুরো টেবিলটি স্থানান্তরিত হবে তা বলার ক্ষেত্রে ভুল। আপনি কোথায় এই তথ্যটি পেয়েছেন তার কোনও রেফারেন্স সরবরাহ করতে পারেন? আমি কেবল একটি লিঙ্কযুক্ত সার্ভারে 204 মিলিয়ন সারি (১GB জিবি ডেটা, .6.GB জিবি সূচক) সহ একটি টেবিলের বিপরীতে যোগদানের চেষ্টা করেছি এবং তথ্যটি সম্ভবত ক্যাশে হওয়ার পরে এটি দ্বিতীয় সন্ধানের ms মাইলের মধ্যে ms সেকেন্ডের সাথে যুক্ত হতে 47 মিমি নিয়েছে। আপনার যোগদানের জন্য যদি লিঙ্কযুক্ত টেবিলটিতে কোনও টেবিল স্ক্যানের প্রয়োজন হয় তবে এটি কি সবগুলি স্থানান্তর করতে হবে?
জেসন গোয়েমাট

32
SELECT * FROM OPENQUERY([SERVER_NAME], 'SELECT * FROM DATABASE_NAME..TABLENAME')

এটি আপনাকে সাহায্য করতে পারে।


উত্সাহিত। আপনি মাইএসকিউএলকে এমএস এসকিউএলে লিঙ্ক করার সময় এটি কাজ করে।
বাজ গুভেনকায়া

4
অন্য কথায়, এটি একটি পাস-মাধ্যমে কোয়েরি তৈরি করছে। মনে রাখবেন যে সার্ভারের জন্য কোয়েরি স্টেটমেন্টটি স্থানীয় এসকিউএলটিতে লিখতে হবে। ওরাকলের
এসেরকিউএল

11

আপনি যদি এখনও সমস্যাটি খুঁজে পান <server>.<database>.<schema>.<table>

সার্ভারের নামটি বন্ধ করুন []


সতর্কতা: আমি নির্বাচন করে একটি তৈরি টেবিল কার্যকর করেছি [] ব্যবহার করে, এবং লিঙ্কযুক্ত সার্ভারে তৈরি হওয়ার পরিবর্তে, টেবিলটি স্থানীয়ভাবে তৈরি হয়েছিলdbo.databaseserver1.db1.dbo.table1
বিস্কুট 314

9

এই অন্যান্য উত্তরগুলির সাথে যাদের সমস্যা হচ্ছে তাদের জন্য চেষ্টা করুনOPENQUERY

উদাহরণ:

 SELECT * FROM OPENQUERY([LinkedServer], 'select * from [DBName].[schema].[tablename]') 

এসকিউএল সার্ভারের জন্য কাজ করে
টম স্টিকেল

8

আপনাকে রেফারির অংশ হিসাবে স্কিমা / মালিক (ডিফল্টরূপে ডিবিও) নির্দিষ্ট করতে হবে। এছাড়াও, নতুন (এএনএসআই -২২) যোগ করার শৈলীটি ব্যবহার করা ভাল।

select foo.id 
    from databaseserver1.db1.dbo.table1 foo
        inner join databaseserver2.db1.dbo.table1 bar 
            on foo.name = bar.name

অভ্যন্তরীণ যোগদান সংশ্লেষ অন্তর্নিহিত যোগদানের চেয়ে ভাল?
bmw0128

4
@ বিএমডব্লিউ १२১৮: হ্যাঁ, বেশ কয়েকটি কারণে। আইএমএইচও, সবচেয়ে গুরুত্বপূর্ণটি হ'ল আপনি যখন নিজের টেবিলগুলি রেখে এবং দুটি পৃথক স্থানে যোগদান করেন তখন দুর্ঘটনাক্রমে ক্রস প্রোডাক্ট জয়েন লিখতে খুব সহজ।

নোট করুন যে 4-ডটেড অংশগুলি কিছু নন-এসকিউএল-সার্ভার সংযুক্ত সার্ভারগুলির জন্য কাজ করে না। এটি ত্রুটি বাড়িয়ে তুলতে পারে যেমন ... লিঙ্কযুক্ত সার্ভার "মাইলিঙ্কড সার্ভার" এর জন্য সরবরাহকারী "এমএসডিএএসকিউএল" সরবরাহকারীর জন্য একটি অবৈধ স্কিমা বা ক্যাটালগ নির্দিষ্ট করা হয়েছিল।
brewmanz

6
select * from [Server].[database].[schema].[tablename] 

এটি কল করার সঠিক উপায়। কোয়েরি কার্যকর করার আগে সার্ভারগুলি সংযুক্ত রয়েছে তা যাচাই করে নিশ্চিত করুন!

লিঙ্কযুক্ত সার্ভারগুলির জন্য চেক করতে কল করুন:

EXEC sys.sp_linkedservers 

এটি কিছু নন-এসকিউএল-সার্ভারের সাথে সংযুক্ত সার্ভারগুলির জন্য কাজ করে না। এটি ত্রুটির মতো করে তোলে ... লিঙ্কযুক্ত সার্ভার "মাইলিঙ্কড সার্ভার" এর জন্য "এমএসডিএএসকিউএল" সরবরাহকারীর জন্য একটি অবৈধ স্কিমা বা ক্যাটালগ নির্দিষ্ট করা হয়েছিল।
brewmanz

4
select name from drsql01.test.dbo.employee
  • drslq01 হ'ল সার্ভারম্যান - লিঙ্কযুক্ত সেরার
  • পরীক্ষা ডাটাবেসের নাম
  • ডিবিও হ'ল স্কিমা-ডিফল্ট স্কিমা
  • কর্মচারী টেবিলের নাম

আমি আশা করি এটি লিঙ্কযুক্ত সার্ভারের জন্য কীভাবে জিজ্ঞাসা চালানো যায় তা বুঝতে সহায়তা করে


2

সাধারণত লিঙ্কযুক্ত সার্ভারের ক্ষেত্রে সরাসরি অনুসন্ধানগুলি ব্যবহার করা উচিত নয় কারণ এটি এসকিউএল সার্ভারের অস্থায়ী ডেটাবেস ব্যবহার করে। প্রথম পর্যায়ে ডেটা অস্থায়ী ডিবিতে পুনরুদ্ধার করা হয় তারপরে ফিল্টারিং ঘটে। এটি সম্পর্কে অনেক থ্রেড আছে। উন্মুক্ত ওপেনকুরি ব্যবহার করা আরও ভাল কারণ এটি উত্স সংযুক্ত সার্ভারে এসকিউএল পাস করে এবং তারপরে এটি ফিল্টারযুক্ত ফলাফলগুলি উদাহরণ দেয়

SELECT *
FROM OPENQUERY(Linked_Server_Name , 'select * from TableName where ID = 500')

এই উত্তরে কোনও ডাটাবেসের নাম অন্তর্ভুক্ত নেই
ক্রিস নেভিল

4
লিঙ্কযুক্ত সার্ভার তৈরি করার সময় আমি ডেটাবেস তথ্য সরবরাহ করেছি। বিস্তারিত জানার জন্য আপনি এমএসডিএন লিঙ্কটি নীচে দেখতে পারেন: msdn.microsoft.com/en-us/library/ff772782(v=sql.110).aspx
মুহাম্মদ ইয়াসিন

আমার লিঙ্কযুক্ত সার্ভারটির যদি প্রমাণীকরণের প্রয়োজন হয় এবং আমি পিডিও ব্যবহার করে আমার পিএইচপি অ্যাপ্লিকেশনটি থেকে কেবল জিজ্ঞাসা করার চেষ্টা করছি তবে আমি কী করতে পারি?
নেকিয়ালা

আপনি এই পদ্ধতির ব্যবহার করে কীভাবে লিংকযুক্ত সার্ভারের ডাটাবেস 1 থেকে ডাটাবেসটিতে একটি যোগদান করবেন?
agগলই

2

এটির মূল্যের জন্য, আমি সর্বাধিক কাজ করার জন্য নিম্নলিখিত সিনট্যাক্সটি পেয়েছি:

[LINKED_SERVER] থেকে * নির্বাচন করুন ... [সারণী]

আমি ডেটাবেসটির নাম ব্যবহার করে অন্যের সুপারিশগুলি কাজ করতে পারি না। অতিরিক্তভাবে, এই ডেটা উত্সটির কোনও স্কিমা নেই।


2

একটি টেবিলের উপর ডান ক্লিক করুন এবং স্ক্রিপ্ট টেবিলটি নির্বাচন করুন হিসাবে ক্লিক করুন

এখানে চিত্র বর্ণনা লিখুন


ওপি যা জিজ্ঞাসা করেছিল তা নয়
Fandango68

4
এটি দেখায় যে কোনও লিঙ্কযুক্ত টেবিলে নির্বাচিত প্রশ্নের জন্য সঠিক বাক্য গঠন কীভাবে পাবেন। ফলাফলটি সমুদ্রের জবাবের মতো
শিমন ডুডকিন

4
@ শিমনডুডকিন, একটি দুর্দান্ত উদাহরণ আমাকে একটি মাছ দেবেন না, তবে আমাকে কীভাবে মাছ ধরতে হবে তা শিখিয়ে দিন
আম্রো

0

ক্যোয়ারী অনুসরণ করা সবচেয়ে ভাল কাজ।

এই প্রশ্নের চেষ্টা করুন:

SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')

এটি মাইএসকিউএলকে এমএস এসকিউএলে লিঙ্ক করতে খুব সহায়তা করে


0

পোস্টগ্র্যাস এসকিউএল :

  1. আপনাকে অবশ্যই ডেটা সোর্স ডিএসএন-তে একটি ডাটাবেসের নাম সরবরাহ করতে হবে
  2. প্রশাসক হিসাবে পরিচালনা স্টুডিও চালান
  3. আপনার অবশ্যই কোয়েরি থেকে DBName বাদ দিতে হবে :

    SELECT * FROM OPENQUERY([LinkedServer], 'select * from schema."tablename"')


0

আমি লিঙ্ক_সভারে টেবিলে ডেটা টাইপ ওপেনকোয়ারি ব্যবহার করে অনুসন্ধান করেছি এবং ফলাফলগুলি সফল হয়েছিল।

SELECT * FROM OPENQUERY (LINKSERVERNAME, '
SELECT DATA_TYPE, COLUMN_NAME
FROM [DATABASENAME].INFORMATION_SCHEMA.COLUMNS
WHERE 
     TABLE_NAME  =''TABLENAME''
')

এটা আমার জন্য কাজ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.