এসএসডিটি যেমন করে এসকিএলসিএমডি মোডে: r এর সাথে বর্তমান স্ক্রিপ্টের আপেক্ষিক পথটি ব্যবহার করতে আমি কীভাবে এসএসএমএস পাব?


11

আমার যদি একই ফোল্ডারে foo.sql এবং বার.এসকিউএল থাকে তবে এসএসডিটি থেকে এসকিএলসিএমডি মোডে চলাকালীন foo.sql বার.এসকিউএল উল্লেখ করতে পারে :r ".\bar.sql"। তবে এসএসএমএস এটি খুঁজে পাবে না। প্রোকমন দেখায় যে এসএসএমএস সন্ধান করছে %systemroot%\syswow64:

এনটোটেড প্রোকমন স্ক্রিনশট

এসএসএমএসকে আমি কীভাবে ফোল্ডারে সন্ধান করতে বলি যে বর্তমান স্ক্রিপ্টটি সুনির্দিষ্টভাবে পথটি ঘোষণা না করেই সংরক্ষণ করা হয়েছে?

উত্তর:


8

আপনি স্ক্রিপ্টটি চালাচ্ছেন না বলে এসএসএমএসে আপেক্ষিক পথ পাওয়াই যে সোজা-ফরোয়ার্ড নয়; এসএসএমএস স্ক্রিপ্টটি মেমরিতে লোড করেছে এবং এটি পাঠ্য সম্পাদন করছে। সুতরাং বর্তমান ডিরেক্টরি / ফোল্ডার হ'ল ডিফল্ট প্রক্রিয়া ফোল্ডার। আপনি এসএসএমএসে এসকিউএলসিএমডি মোডে নিম্নলিখিতটি চালিয়ে দেখতে পারেন:

!! PWD

যাইহোক, আমি এটি করার জন্য একটি কিন্ডা-বাছা উপায় খুঁজে পেয়েছি। আমি স্বীকার করি যে এটি করার জন্য এটি সবচেয়ে সর্বোত্তম আদর্শ উপায় নয় তবে বর্তমানে এটি সত্যিকারের আপেক্ষিক পাথ পাওয়ার একমাত্র উপায় বলে মনে হচ্ছে (ভেরিয়েবলের মধ্যে পাথ নির্ধারণ করা সত্যই প্রতি সেঞ্চে "আপেক্ষিক" নয় )।

সুতরাং আপনি যা করতে পারেন তা হ'ল:

  1. Foo.sql সন্ধান করার জন্য একটি ডস কমান্ড কার্যকর করুন এবং এসএসএমএস থেকে যে ফোল্ডারে আপনি এসএসএমএস থেকে পেতে পারেন কোনও পাঠ্য ফাইলে সেই ফাইলটির পাথ সংরক্ষণ করুন, তা হয় এটি হার্ড-কোডেড পাথ বা কারণ এটি পরিবেশগত ভেরিয়েবল ব্যবহার করে যা উপলভ্য এসএসএমএসে ডস কমান্ড এবং এসকিউএলসিএমডি মোড উভয়ই
  2. সেই ফাইলটিতে পাথ সংরক্ষণ করার সময়, এটি একটি এসকিউএলসিএমডি মোড কমান্ড হিসাবে সংরক্ষণ করুন যা সেই পথে একটি ভেরিয়েবল সেট করে
  3. এসএসএমএস ব্যবহার করে সেই পাঠ্য ফাইলটি আমদানি করুন :rএবং এটি সেই পরিবর্তনশীলটিকে পছন্দসই পথে সেট করবে
!! CD C:\ & FOR /F %B IN ('DIR /B /A -HS /S foo.sql') DO ECHO :setvar mypath "%~dpB" > %TEMP%\relative_path.txt

:r $(TEMP)\relative_path.txt

:r $(mypath)\bar.sql

মন্তব্য:

  • উপরের পদ্ধতিটি সিস্টেমে কেবলমাত্র 1 টি ফাইলের নাম রাখা হয়েছে foo.sql । যদি একাধিক ফাইলে সেই নামটি থাকে, তবে শেষটি পাওয়া যাবে যা সম্পর্কিত_পথ.টিএসটি ফাইলের মধ্যে সেট সেট হবে set

  • এরকম CD C:\রুট এ শুরু হবে সি: ড্রাইভ। এটি সম্ভবত সবচেয়ে কার্যকর জায়গা নয়। সি: \ ব্যবহারকারীগণ {আপনার লোগিন \ u নথিগুলি \ ভিজ্যুয়াল স্টুডিও 2013 as প্রকল্পগুলির মতো কোনও অঞ্চলে আপনার যদি সাধারণত আপনার এসকিউএল ফাইল থাকে তবে কেবল CDগন্তব্যের নিকটে যাওয়ার জন্য আদেশটি পরিবর্তন করুন যেমন:

    !! CD C:\Users\{YourLogin}\Documents\Visual Studio 2013 & FOR ...

এটি সৃজনশীল, তবে ধীর এবং ডিস্ক নিবিড়।
জাস্টিন ডিয়ারিং

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

যদিও এটি আমাকে দু: খিত করে তোলে, এটি অবশ্যই সর্বোত্তম উত্তর যা অন্য কোনও কমান্ড স্ক্রিপ্ট থেকে পথ নির্ধারণ বা ফাইলটিতে হার্ড কোডিংয়ের সাথে জড়িত না।
কুইহ্যামার

5

আমি ভুল হতে পারি, তবে আমি মনে করি না এটি সম্ভব। অন্যরা কী করেছে তার উদাহরণের জন্য দয়া করে এই লিঙ্কগুলি দেখুন (কোনওটিই আদর্শ নয়)।

/programming/8753541/how-to-get-the-relative-path-of-file-in-sqlcmd-mode-in-ssms

http://boardreader.com/thread/Specifying_relative_path_to_r_command_in_lmlz__f0c78408-e001-48a2-8369-338c9534f496.html


ঠিক আছে যে সফল হয়, তবে আমার ধারণা এটি এসএসডিটি ব্যবহারকে উত্সাহ দেয়।
জাস্টিন ডিয়ারিং

2

আমি আপনার sqlcmd ভেরিয়েবল ফাইলটি 'সি: \ ব্যবহারকারীদের \ your_nt_login_name \ AppData \ লোকাল \ টেম্পে' সংরক্ষণ করার পরামর্শ দিচ্ছি এবং এটিকে আমার সমস্ত প্রকল্প থেকে T (TEMP) q sqlcmd_variables.sql হিসাবে উল্লেখ করছি।

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