নির্বাচন ফলাফলগুলি সন্নিবেশ স্ক্রিপ্টে রূপান্তর করা - এসকিউএল সার্ভার [বন্ধ]


106

আমার আছে SQL Server 2008, এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও।

আমার Table1ডাটাবেস 1 থেকে ডেটা নির্বাচন করতে হবে । তারপরে ফলাফল এবং insert values into Table1ডাটাবেস 2 এ আমাকে কিছু মান সম্পাদনা করতে হবে ।

বা আমাকে অন্যভাবে রাখুন।

আমি কীভাবে এক টেবিলের ডেটা রূপান্তর করতে পারি insert script


একই সার্ভারে ডাটাবেসগুলি কি? যদি তাই হয় তবে আপনি একটি থেকে অন্যটিতে সন্নিবেশ করতে পারেন। ডাটাবেস
2.dbo.myTable intoোকান

হ্যাঁ উভয় ডাটাবেস একই সার্ভারে রয়েছে। তবে আমার স্ক্রিপ্ট দরকার। আমি এই স্ক্রিপ্টগুলি আমাদের ডাটাবেস লোককে দেব।
ক্যাপ্টেন কমিক

এটি প্রশ্নটি পরিষ্কার করতে সহায়তা করবে। কোন পদ্ধতির কাজ করবে বা আপনার একটি ডিবিতে হস্তান্তর করতে পারেন এমন কোনও scriptোকানো স্ক্রিপ্টের দরকার আছে?
গ্রেগ

উত্তর:


31

SSMS Toolpack (যা বিনামূল্যে সহ - বিয়ার হিসাবে) দুর্দান্ত বৈশিষ্ট্যগুলি বিভিন্ন আছে উৎপাদিত ঢোকান বিবৃতি টেবিল থেকে।

আপডেট: এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও 2012 (এবং আরও নতুন) এর জন্য, এসএসএমএস টুলপ্যাকটি আর মুক্ত নয়, তবে একটি পরিমিত লাইসেন্স ফি প্রয়োজন।


+1 @marc_s আমি টি-এসকিউএল জেনারেটর স্ক্রিপ্টগুলি আনসেট করে এমন সন্নিবেশ স্ক্রিপ্টগুলি উত্পন্ন করার জন্য অনেক কাজ করেছি এবং এখন আপনি আমাকে বলবেন যে একটি সরঞ্জাম রয়েছে।
bernd_k

যখন টেবিলগুলি অর্থের ডেটা সঞ্চয় করে থাকে তখন সাবধান হন । এই তথ্য টাইপগুলি সাধারণত প্রদর্শিত হয় তার চেয়ে বেশি দশমিক স্থান বা এসএসএমএস টুলপ্যাকের দ্বারা উত্পাদিত স্ক্রিপ্টগুলিতে সংরক্ষণ করতে পারে
bernd_k

13
এটি আর মুক্ত নয়। ssmstoolspack.com/Licensing
গ্রেগ

@ গ্রেগ: এটি নির্দেশ করার জন্য ধন্যবাদ। দ্রষ্টব্য: লাইসেন্সিং কেবল এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও 2012 এবং আরও নতুন ক্ষেত্রে প্রযোজ্য - পূর্ববর্তী সংস্করণগুলির জন্য, সরঞ্জামপ্যাকটি এখনও নিখরচায়।
marc_s

4
এসএসএমএস টুলপ্যাকের বিকল্প ?
কিকিনেট

154

এখানে অন্য পদ্ধতি রয়েছে যা কিছু পরিস্থিতিতে প্লাগিন বা বাহ্যিক সরঞ্জাম ইনস্টল করার চেয়ে সহজ হতে পারে:

  • select [whatever you need]INTO temp.table_namefrom [... etc ...]
  • অবজেক্ট এক্সপ্লোরার => টাস্ক => স্ক্রিপ্টস জেনারেটরে ডাটাবেসে ডান ক্লিক করুন
  • নির্বাচন করা temp.table_name "অবজেক্টস চয়ন করুন" পর্দায় Next বাটনে ক্লিক করুন।
  • "স্ক্রিপ্টগুলি কীভাবে সংরক্ষণ করা উচিত তা উল্লেখ করুন" স্ক্রিনে:
    • উন্নত ক্লিক করুন, "স্ক্রিপ্টে ডেটার ধরণ" সম্পত্তিটি সন্ধান করুন, "কেবলমাত্র ডেটা" নির্বাচন করুন, উন্নত বৈশিষ্ট্যগুলি বন্ধ করুন।
    • "নতুন ক্যোয়ারী উইন্ডোতে সংরক্ষণ করুন" নির্বাচন করুন (যদি আপনার হাজার হাজার রেকর্ড না থাকে)।
  • পরবর্তী ক্লিক করুন, কাজটি শেষ হওয়ার জন্য অপেক্ষা করুন, ফলাফলের INSERTবিবৃতিগুলি একটি নতুন ক্যোয়ারী উইন্ডোতে উপস্থিত হওয়া পর্যবেক্ষণ করুন ।
  • ব্যবহারের খুঁজুন & সব পরিবর্তন করতে প্রতিস্থাপন [temp.table_name]করতে [your_table_name]
  • drop table [temp.table_name]

INTO temp.table1 ব্যবহার করা নিম্নলিখিত ত্রুটিটি উত্পন্ন করে: নির্দিষ্ট স্কিমার নাম "টেম্প" হয় হয় না হয় আপনার এটি ব্যবহার করার অনুমতি নেই। আমি এসকিউএল 2012 ব্যবহার করছি
চিহ্নিত করুন

3
tempএখানে আপনার অ্যাক্সেস থাকা কোনও স্কিমা বোঝায়। আপনি হয় একটি ( create schema temp) তৈরি করতে পারেন এবং তারপরে এটি সরিয়ে ফেলতে পারেন, বা (আরও ভাল) আপনি বর্তমানে যে স্কিমা ব্যবহার করছেন তা কেবল ব্যবহার করুন
কেটি T

1
এই জন্য আপনাকে ধন্যবাদ, আমি জানতাম একটি উপায় অবশ্যই আছে! যাইহোক, আপনি স্ক্রিপ্ট করতে চান এমন টেবিলের পুরো ডেটা প্রয়োজন হলে আপনি টেম্প টেবিল তৈরিটি এড়িয়ে যেতে পারেন।
এফএবি

আজুর ডেটাবেসে ডেটা আমদানি করতে আমাকে এটি ব্যবহার করতে হয়েছিল। এটিকে একটি অজুর ডেটাবেজে আমদানি করুন তারপরে এসকিউএল সন্নিবেশ হিসাবে এক্সট্রাক্ট করুন।
m12lrpv

2
এটি এখনও আমাকে বিস্মিত করে যে এসএসএমএস ফলাফলের সেটগুলিতে 'সন্নিবেশ স্ক্রিপ্ট হিসাবে আউটপুটটি দেখায়' এই ক্ষমতাটি যোগ করেনি .. তবে উপরোক্ত পদ্ধতিটি কাজ করে, যদিও এটি একটি সঠিক বাল্ক সন্নিবেশ করার পরিবর্তে স্বতন্ত্র সন্নিবেশ কমান্ড তৈরি করে (প্রতি সন্নিবেশে 1,000 আইটেম বলুন) ) এটি করা উচিত। এটি সত্যিই বড় ফলাফলের সেটগুলিতে চিরতরে নিতে পারে
ট্রেডারহুট গেমস

60

এসএসএমএসে:

  • ডাটাবেস> টাস্ক> স্ক্রিপ্ট উত্পন্ন করার জন্য ডান ক্লিক করুন

  • পরবর্তী

  • "নির্দিষ্ট ডাটাবেস অবজেক্ট নির্বাচন করুন" নির্বাচন করুন এবং সারণীতে আপনি যে টেবিলটি স্ক্রিপ্ট করতে চান তা পরীক্ষা করুন Next

  • Advanced >বিকল্পগুলির তালিকায় ক্লিক করুন, নীচে নীচে স্ক্রোল করুন এবং "স্ক্রিপ্টে ডেটার প্রকারগুলি" সন্ধান করুন এবং এটিকে "কেবলমাত্র ডেটা" তে পরিবর্তন করুন> ঠিক আছে

  • "নতুন ক্যোয়ারী উইন্ডোতে সংরক্ষণ করুন" নির্বাচন করুন> পরবর্তী> পরবর্তী> সমাপ্ত

সমস্ত 180 টি সারি এখন 180 টি statementsোকানো বিবৃতি হিসাবে লেখা!


12
কয়েকটি সারি জন্য দরকারী। দরকারী নয় : যদি কোনও টেবিলে 20000 সারি থাকে এবং আমি 20 সারিগুলির জন্য কেবল 20 টি সন্নিবেশ চাই।
কিকিনেট

2
@ কুইকিনেট - আপনি প্রথমে এমন একটি ভিউ তৈরি করতে পারেন যা আপনার পছন্দসই 20 টি সারি নির্বাচন করে, তারপরে দৃশ্যের উপর ভিত্তি করে scোকান স্ক্রিপ্টগুলি তৈরি করতে এই পদক্ষেপগুলি অনুসরণ করুন। এরপরে আপনি ভিউ নামটি যা সারণীর নাম সন্নিবেশ করানোর প্রয়োজন তা ফিরিয়ে নিতে পরিবর্তিত করতে আপনি একটি ভর অনুসন্ধান করতে এবং প্রতিস্থাপন করতে পারেন।
টেম্বার

@ সেপ্টেম্বর এটি আপনার বলার মতো ভিউতে কাজ করে না, তবে এটি ভিজ্যুয়াল স্টুডিওতে রয়েছে: প্রথমে আপনি স্কয়ার স্টুডিওতে প্রয়োজনীয় নির্বাচনের সাথে একটি ভিউ তৈরি করেন, তারপরে ভিজ্যুয়াল স্টুডিও খুলুন, এসকিএল সার্ভারের সাথে সংযোগ স্থাপন করুন এবং সেই তৈরি দৃশ্যে স্ক্রিপ্ট তৈরি করবেন।
সের্গেই

এই তথ্যের জন্য আপনাকে ধন্যবাদ। যদিও পুরো টেবিলটি ডাম্প করা একটি ওভারকিল, এটি আমার সমস্যার সমাধান করেছে।
পলজ

জীবন রক্ষাকারী আমি সারা জীবন স্ক্রিপ্ট লিখি।
জে

38

নেটিভ পদ্ধতি :

উদাহরণস্বরূপ যদি আপনার টেবিল থাকে

Users(Id, name)

তুমি এটি করতে পারো:

select 'insert into Table values(Id=' + Id + ', name=' + name + ')' from Users

আপনি এটি এইভাবে করতে পারেন, তবে আপনার কয়েকটি টেবিলের বেশি থাকলে এটি কিছুটা টাইপ হয়ে যায়। গুগলে এমন লিখিত এবং সন্ধানযোগ্য রয়েছে যা আপনার জন্য এটি করে বা আপনার কাছে যদি ভিএস ২০১২ থাকে তবে আপনার কাছে ভিএস করতে পারেন। আমার উত্তর নীচে দেখুন।
গ্রেগ

1
কয়েকটি ক্ষেত্র সহ টেবিলগুলির জন্য দরকারী। যদি কোনও টেবিলের 50, 60, 100 কলাম কার্যকর না হয়। আরও ভাল জেনারেশন এসকিউএল কোড
কিকিনেট

23

1- লিপিগুলির ব্যাখ্যা

ক) সারণীতে ডেটা forোকানোর সিনট্যাক্সটি নীচে রয়েছে

Insert into table(col1,col2,col3,col4,col5)    

             -- To achieve this part i    
             --have used below variable
                ------@CSV_COLUMN-------

values(Col1 data in quote, Col2..quote,..Col5..quote)

-- To achieve this part 
-- i.e column data in 
--quote i have used 
--below variable
----@QUOTED_DATA---

গ) বিদ্যমান সারণী থেকে উপরের তথ্যগুলি পেতে আমাদের নির্বাচিত ক্যোয়ারীটি এমনভাবে লিখতে হবে যাতে আউটপুট উপরের স্ক্রিপ্টগুলির আকারে হয়

ডি) তারপরে অবশেষে আমি চূড়ান্ত স্ক্রিপ্ট তৈরি করতে উপরের ভেরিয়েবলের সাথে সংযুক্ত হয়েছি যা কার্যকর করার ক্ষেত্রে সন্নিবেশ লিপি তৈরি করবে

ই)

@TEXT='SELECT ''INSERT INTO
 '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER_CONDITION

চ) এবং শেষ পর্যন্ত উপরের প্রশ্নটি কার্যকর করা হয়েছে EXECUTE(TEXT)

জি)QUOTENAME() ফাংশনটি উদ্ধৃতিতে কলামের ডেটা মোড়ানো করতে ব্যবহৃত হয়

এইচ) ISNULLব্যবহৃত হয় কারণ যদি কোনও সারিতে NULL কোনও কলামের ডেটা থাকে তবে ক্যোয়ারী ব্যর্থ হয় এবং NULLআমি যে ব্যবহার করেছি তা এড়াতে কেন তা ফিরিয়ে দেয়ISNULL

আমি) এবং এসপি তৈরি sp_generate_insertscripts জন্য

1- আপনি যে টেবিলের নামটি চান তা ঠিক রাখুন insert script

2- ফিল্টার শর্ত যদি আপনি নির্দিষ্ট ফলাফল চান

----------Final Procedure To generate Script------

CREATE PROCEDURE sp_generate_insertscripts
(
    @TABLE_NAME VARCHAR(MAX),
    @FILTER_CONDITION VARCHAR(MAX)=''
)
AS
BEGIN

SET NOCOUNT ON

DECLARE @CSV_COLUMN VARCHAR(MAX),
        @QUOTED_DATA VARCHAR(MAX),
        @TEXT VARCHAR(MAX)

SELECT @CSV_COLUMN=STUFF
(
    (
     SELECT ',['+ NAME +']' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @QUOTED_DATA=STUFF
(
    (
     SELECT ' ISNULL(QUOTENAME('+NAME+','+QUOTENAME('''','''''')+'),'+'''NULL'''+')+'','''+'+' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @TEXT='SELECT ''INSERT INTO '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER_CONDITION

--SELECT @CSV_COLUMN AS CSV_COLUMN,@QUOTED_DATA AS QUOTED_DATA,@TEXT TEXT

EXECUTE (@TEXT)

SET NOCOUNT OFF

END

আপনি একটি আশ্চর্যজনক কাজ করেছেন ...
দিনেশডিবি

14

ভিজ্যুয়াল স্টুডিওর মাধ্যমে এটি করা সম্ভব এসকিউএল সার্ভার অবজেক্ট এক্সপ্লোরারের ।

প্রয়োজনীয় টেবিল, ফিল্টার ফলাফলের জন্য এবং প্রবন্ধটি স্ক্রিপ্ট হিসাবে সংরক্ষণের জন্য আপনি প্রসঙ্গ মেনু থেকে "ডেটা দেখুন" ক্লিক করতে পারেন।


1
আপনার পোস্ট সঠিক এবং সহজ পদ্ধিতি হল উপায় ভিসুয়াল স্টুডিও মধ্যে SQL সার্ভার ডেটা সরঞ্জামগুলি ব্যবহার করে, এখানে এবং এখানে পোস্ট ব্যাখ্যা যা কেমন প্রথম 1000 সারির বিবৃতি সন্নিবেশ উৎপন্ন আশা করতে সাহায্য করে।
শাইজুট

8

ভিজ্যুয়াল স্টুডিও ব্যবহার করে, নিম্নলিখিতগুলি করুন

এসকিউএল সার্ভার -> এসকিউএল সার্ভার ডাটাবেস প্রকল্প প্রকারের একটি প্রকল্প তৈরি করুন

SQL সার্ভার এক্সপ্লোরার সিটিএল- open, সিটিএল-এস খুলুন

এসকিউএল সার্ভার আইকনে ডান ক্লিক করে একটি এসকিউএল সার্ভার যুক্ত করুন। সেলেট নতুন সার্ভার যুক্ত করুন

আপনার আগ্রহী সারণীতে নেভিগেট করুন

ডান ক্লিক করুন -> ডেটা দেখুন

সবকিছু হাইলাইট করতে উপরের বাম কক্ষে ক্লিক করুন (সিটিএল-এ কাজ করে বলে মনে হচ্ছে না)

রাইট ক্লিক -> স্ক্রিপ্ট

এটি কল্পিত। আমি বছরের পর বছর ধরে উপরে তালিকাভুক্ত সমস্ত কিছু চেষ্টা করেছি। আমি জানি যে এখানে একটি সরঞ্জাম আছে যা এটি করবে এবং আরও অনেক কিছু করবে না, এর নামটি ভাবতে পারে না। তবে এটি খুব ব্যয়বহুল।

শুভকামনা। আমি স্রেফ এটি বুঝতে পেরেছি। এটি w / টেক্সট ক্ষেত্র ইত্যাদির জন্য ব্যাপকভাবে পরীক্ষা করে দেখেনি, তবে দেখে মনে হচ্ছে এটি আপনাকে রাস্তা থেকে দীর্ঘ পথ পাবে।

গ্রেগ


1
এটি নির্বাচিত ফলাফলগুলিতে রূপান্তর করে না, এটি কেবল টেবিলের বাইরে স্ক্রিপ্ট করে।
এরিক কে

@ কোয়ান্টামডিনামিক্স - মূল প্রশ্নটি নীচে নীচে স্পষ্ট করে বলা হয়েছে 'আমি কীভাবে একটি টেবিলের ডেটাটিকে স্ক্রিপ্টে রূপান্তর করতে পারি?' নীচে আমার পদ্ধতির একটি নমুনা দেওয়া হল। এটি ব্যবহারকারী যা চেয়েছিলেন ঠিক তা-ই। প্রকৃতপক্ষে, এটিই কেবলমাত্র একমাত্র সমাধান যা আমি দেখতে পাই প্রকৃতপক্ষে সন্নিবেশগুলির স্ক্রিপ্ট তৈরি করে, যেমন ব্যবহারকারী জিজ্ঞাসা করে। ডাউনটা কেন? 'নির্বাচিত ফলাফল রূপান্তর করে না' এর অর্থ কী? পরিচয়পত্রের নাম সেট করুন [পিএমডিবি] [ , N'67.07213 ')
গ্রেগ

এটি টেম্প টেবিলগুলি তৈরি করার সাথে সাথে এটি আমার জন্য করেছিল
hr-tis

4

বিবৃতিতে পৃথক টেবিল তৈরি করুন উদাহরণস্বরূপ

[Dbo] থেকে টেস্ট_123 এ * নির্বাচন করুন [[কর্মচারী] যেখানে '% টেস্ট%' এর মতো নাম

ডেটাবেস এ ডান ক্লিক করুন ডেটাবেস জেনারেট স্ক্রিপ্টে ক্লিক করুন আপনার টেবিলটি নির্বাচন করুন অ্যাডভান্সিয়াস বিকল্পটি নির্বাচন করুন এবং "কেবলমাত্র ডেটা" অ্যাট্রিবিউটটি নির্বাচন করুন "নতুন ক্যোয়ারিতে খোলা ফাইলটি নির্বাচন করুন"

SQL আপনার জন্য স্ক্রিপ্ট তৈরি করবে


3

আপনি এসএসএমএসে 'রেজাল্ট টু ফাইল' বিকল্পটি চয়ন করতে পারেন এবং ফাইলের জন্য আপনার সিলেক্ট রেজাল্ট এক্সপোর্ট করতে পারেন এবং ফলাফল ফাইলে আপনার পরিবর্তনগুলি করতে পারেন এবং শেষ পর্যন্ত বিসিপি ব্যবহার করে - ডাটাবেস 2-এ টেবিল 1 এ সন্নিবেশ করতে পারেন বাল্ক কপি।

আমি মনে করি বাল্ক প্রবেশের জন্য আপনাকে .rpt ফাইলটিকে .csv ফাইলে রূপান্তর করতে হবে

আশা করি এটি সাহায্য করবে।


2

আমারও একই সমস্যা ছিল, তবে আমার কোনও ক্যোয়ারী (ফিল্টার ইত্যাদি) থেকে একটি INSERT বিবৃতি তৈরি করতে সক্ষম হওয়া দরকার needed

সুতরাং আমি নিম্নলিখিত পদ্ধতি তৈরি করেছি:

CREATE PROCEDURE dbo.ConvertQueryToInsert (@input NVARCHAR(max), @target NVARCHAR(max)) AS BEGIN

    DECLARE @fields NVARCHAR(max);
    DECLARE @select NVARCHAR(max);

    -- Get the defintion from sys.columns and assemble a string with the fields/transformations for the dynamic query
    SELECT
        @fields = COALESCE(@fields + ', ', '') + '[' + name +']', 
        @select = COALESCE(@select + ', ', '') + ''''''' + ISNULL(CAST([' + name + '] AS NVARCHAR(max)), ''NULL'')+'''''''
    FROM tempdb.sys.columns 
    WHERE [object_id] = OBJECT_ID(N'tempdb..'+@input);

    -- Run the a dynamic query with the fields from @select into a new temp table
    CREATE TABLE #ConvertQueryToInsertTemp (strings nvarchar(max))
    DECLARE @stmt NVARCHAR(max) = 'INSERT INTO #ConvertQueryToInsertTemp SELECT '''+ @select + ''' AS [strings] FROM '+@input
    exec sp_executesql @stmt

    -- Output the final insert statement 
    SELECT 'INSERT INTO ' + @target + ' (' + @fields + ') VALUES (' + REPLACE(strings, '''NULL''', 'NULL') +')' FROM #ConvertQueryToInsertTemp

    -- Clean up temp tables
    DROP TABLE #ConvertQueryToInsertTemp
    SET @stmt = 'DROP TABLE ' + @input
    exec sp_executesql @stmt
END

তারপরে আপনি আপনার ক্যোয়ারীর আউটপুটটি একটি টেম্প টেবিলটিতে লিখে প্রক্রিয়াটি চালিয়ে এটি ব্যবহার করতে পারেন:

-- Example table
CREATE TABLE Dummy (Id INT, Comment NVARCHAR(50), TimeStamp DATETIME)
INSERT INTO Dummy VALUES (1 , 'Foo', GetDate()), (2, 'Bar', GetDate()), (3, 'Foo Bar', GetDate())

-- Run query and procedure
SELECT * INTO #TempTableForConvert FROM Dummy WHERE Id < 3
EXEC dbo.ConvertQueryToInsert '#TempTableForConvert', 'dbo.Dummy'

দ্রষ্টব্য: এই পদ্ধতিটি কেবল একটি স্ট্রিংয়ে মানগুলি কাস্ট করে যা ডেটাটিকে কিছুটা আলাদা দেখায়। DATETIME এর সাথে উদাহরণস্বরূপ সেকেন্ডগুলি হারিয়ে যাবে।


2

এটি একটি বহুমুখী সমাধান (যা প্রশ্নটি জিজ্ঞাসা করার চেয়ে কিছুটা বেশি করতে পারে), এবং একটি নতুন সঞ্চিত প্রোক তৈরি না করে কোয়েরি উইন্ডোতে ব্যবহার করা যেতে পারে - উদাহরণস্বরূপ যেখানে আপনার লেখার অ্যাক্সেস নেই সেখানে উত্পাদন ডেটাবেজে দরকারী ।

কোডটি ব্যবহার করতে, দয়া করে ইন লাইন মন্তব্য অনুসারে পরিবর্তন করুন যা এর ব্যবহারটি ব্যাখ্যা করে। তারপরে আপনি কেবল একটি ক্যোয়ারী উইন্ডোতে এই ক্যোয়ারীটি চালাতে পারেন এবং এটি আপনার প্রয়োজনীয় INSERT বিবৃতি মুদ্রণ করবে।

SET NOCOUNT ON

-- Set the ID you wish to filter on here
DECLARE @id AS INT = 123

DECLARE @tables TABLE (Name NVARCHAR(128), IdField NVARCHAR(128), IdInsert BIT, Excluded NVARCHAR(128))

-- Add any tables you wish to generate INSERT statements for here. The fields are as thus:
 -- Name: Your table name
 -- IdField: The field on which to filter the dataset
 -- IdInsert: If the primary key field is to be included in the INSERT statement
 -- Excluded: Any fields you do not wish to include in the INSERT statement
INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable1', 'Id', 0, 'Created,Modified')
INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable2', 'Id', 1, 'Created,Modified')

DECLARE @numberTypes TABLE (sysId TINYINT)

-- This will ensure INT and BIT types are not surrounded with quotes in the
-- resultant INSERT statement, but you may need to add more (from sys.types)
INSERT @numberTypes(SysId) VALUES(56),(104)

DECLARE @rows INT = (SELECT COUNT(*) FROM @tables)
DECLARE @cnt INT = 1

DECLARE @results TABLE (Sql NVARCHAR(4000))

WHILE @cnt <= @rows
BEGIN
    DECLARE @tablename AS NVARCHAR(128)
    DECLARE @idField AS NVARCHAR(128)
    DECLARE @idInsert AS BIT
    DECLARE @excluded AS NVARCHAR(128)
    SELECT
        @tablename = Name,
        @idField = IdField,
        @idInsert = IdInsert,
        @excluded = Excluded
    FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RowId FROM @tables) t WHERE t.RowId = @cnt

    DECLARE @excludedFields TABLE (FieldName NVARCHAR(128))
    DECLARE @xml AS XML = CAST(('<X>' + REPLACE(@excluded, ',', '</X><X>') + '</X>') AS XML)
    INSERT INTO @excludedFields SELECT N.value('.', 'NVARCHAR(128)') FROM @xml.nodes('X') AS T(N)

    DECLARE @setIdentity NVARCHAR(128) = 'SET IDENTITY_INSERT ' + @tablename

    DECLARE @execsql AS NVARCHAR(4000) = 'SELECT ''' + CASE WHEN @idInsert = 1 THEN @setIdentity + ' ON' + CHAR(13) ELSE '' END + 'INSERT INTO ' + @tablename + ' ('
    SELECT @execsql = @execsql +
    STUFF
    (
        (
            SELECT CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN ', ' + name ELSE '' END
            FROM sys.columns
            WHERE object_id = OBJECT_ID('dbo.' + @tablename)
            FOR XML PATH('')
        ), 1, 2, ''
    ) +
    ')' + CHAR(13) + 'VALUES (' +
    STUFF
    (
        (
            SELECT
                CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN
                    ''', '' + ISNULL(' +
                    CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ''''''''' + ' END +
                    'CAST(' + name + ' AS VARCHAR)' +
                    CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ' + ''''''''' END +
                    ', ''NULL'') + '
                ELSE ''
                END
            FROM sys.columns
            WHERE object_id = OBJECT_ID('dbo.' + @tablename)
            FOR XML PATH('')
        ), 1, 3, ''
    ) +
    ''')' + CASE WHEN @idInsert = 1 THEN CHAR(13) + @setIdentity + ' OFF' ELSE '' END +
    ''' FROM ' + @tablename + ' WHERE ' + @idField + ' = ' + CAST(@id AS VARCHAR)

    INSERT @results EXEC (@execsql)
    DELETE @excludedFields
    SET @cnt = @cnt + 1
END

DECLARE cur CURSOR FOR SELECT Sql FROM @results
OPEN cur

DECLARE @sql NVARCHAR(4000)
FETCH NEXT FROM cur INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @sql
    FETCH NEXT FROM cur INTO @sql
END

CLOSE cur
DEALLOCATE cur

1

আপনি ব্যবহার করতে পারেন SQL সার্ভার ইন্টিগ্রেশন পরিষেবা প্যাকেজগুলি বিশেষভাবে জন্য ডিজাইন করা আমদানি ও রপ্তানি অপারেশন

আপনার প্যাকেজগুলির বিকাশের জন্য ভিএসের একটি প্যাকেজ রয়েছে যদি আপনি সম্পূর্ণরূপে এসকিএল সার্ভার ইনস্টল করেন।

বিজনেস ইন্টেলিজেন্স ডেভলপমেন্ট স্টুডিওতে একীকরণ পরিষেবাদি


1

আমি মনে করি অ্যাডহক প্রশ্নের সাথে এটিও সম্ভব আপনার ফলাফল এক্সপোর্ট ফাইলের জন্য রফতানি করতে পারেন এবং তারপরে সেই ফাইলটি আপনার ডেটেটেবল অবজেক্টে আমদানি করতে পারেন বা এটি যেমনটি ব্যবহার করতে পারেন এবং তারপরে দ্বিতীয় ডাটাবেসে এক্সেল ফাইলটি আমদানি করতে পারেন এই লিঙ্কটি একবার দেখুন এটি আপনাকে সাহায্য করতে পারে অনেক.

http://vscontrols.blogspot.com/2010/09/import-and-export-excel-to-sql-server.html


1

আমি নিম্নলিখিতটি তৈরি করেছি procedure:

if object_id('tool.create_insert', 'P') is null
begin
  exec('create procedure tool.create_insert as');
end;
go

alter procedure tool.create_insert(@schema    varchar(200) = 'dbo',
                                   @table     varchar(200),
                                   @where     varchar(max) = null,
                                   @top       int = null,
                                   @insert    varchar(max) output)
as
begin
  declare @insert_fields varchar(max),
          @select        varchar(max),
          @error         varchar(500),
          @query         varchar(max);

  declare @values table(description varchar(max));

  set nocount on;

  -- Get columns
  select @insert_fields = isnull(@insert_fields + ', ', '') + c.name,
         @select = case type_name(c.system_type_id)
                      when 'varchar' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + cast(' + c.name + ' as varchar) + '''''''', ''null'')'
                      when 'datetime' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + convert(varchar, ' + c.name + ', 121) + '''''''', ''null'')'
                      else isnull(@select + ' + '', '' + ', '') + 'isnull(cast(' + c.name + ' as varchar), ''null'')'
                    end
    from sys.columns c with(nolock)
         inner join sys.tables t with(nolock) on t.object_id = c.object_id
         inner join sys.schemas s with(nolock) on s.schema_id = t.schema_id
   where s.name = @schema
     and t.name = @table;

  -- If there's no columns...
  if @insert_fields is null or @select is null
  begin
    set @error = 'There''s no ' + @schema + '.' + @table + ' inside the target database.';
    raiserror(@error, 16, 1);
    return;
  end;

  set @insert_fields = 'insert into ' + @schema + '.' + @table + '(' + @insert_fields + ')';

  if isnull(@where, '') <> '' and charindex('where', ltrim(rtrim(@where))) < 1
  begin
    set @where = 'where ' + @where;
  end
  else
  begin
    set @where = '';
  end;

  set @query = 'select ' + isnull('top(' + cast(@top as varchar) + ')', '') + @select + ' from ' + @schema + '.' + @table + ' with (nolock) ' + @where;

  insert into @values(description)
  exec(@query);

  set @insert = isnull(@insert + char(10), '') + '--' + upper(@schema + '.' + @table);

  select @insert = @insert + char(10) + @insert_fields + char(10) + 'values(' + v.description + ');' + char(10) + 'go' + char(10)
    from @values v
   where isnull(v.description, '') <> '';
end;
go

তারপরে আপনি এটি সেভাবে ব্যবহার করতে পারেন:

declare @insert varchar(max),
        @part   varchar(max),
        @start  int,
        @end    int;

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'customer',
                        @where  = 'id = 1',
                        @insert = @insert output;

-- Print one line to avoid the maximum 8000 characters problem
while len(@insert) > 0
begin
  set @end = charindex(char(10), @insert);

  if @end = 0
  begin
    set @end = len(@insert) + 1;
  end;

  print substring(@insert, @start, @end - 1);
  set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
end;

আউটপুট এমন কিছু হবে:

--DBO.CUSTOMER
insert into dbo.customer(id, name, type)
values(1, 'CUSTOMER NAME', 'F');
go

আপনি যদি কেবল সারিগুলির একটি ব্যাপ্তি পেতে চান তবে @topপ্যারামিতিটি বেলো হিসাবে ব্যবহার করুন :

declare @insert varchar(max),
        @part   varchar(max),
        @start  int,
        @end    int;

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'customer',
                        @top    = 100,
                        @insert = @insert output;

-- Print one line to avoid the maximum 8000 characters problem
while len(@insert) > 0
begin
  set @end = charindex(char(10), @insert);

  if @end = 0
  begin
    set @end = len(@insert) + 1;
  end;

  print substring(@insert, @start, @end - 1);
  set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
end;

এটি সহায়তা করে তবে এটি এই ক্ষেত্রটি "6C2A94737A456C405FDCF793DFA6E661: BqRc / DpUIe27" কে কেবল "6C2A94737A456C405FDCF793DFA6E6"
এডাম মেন্দোজা

0

যদি আপনি ওরাকল ব্যবহার করেন (বা এসকিউএল সার্ভারে অ্যাপ্লিকেশনটি কনফিগার করেছেন) তবে ওরাকল এসকিউএল বিকাশকারী এটি আপনার জন্য করে। কোনও টেবিলের জন্য 'আনলোড' চয়ন করুন এবং এর মাধ্যমে অপশনগুলি অনুসরণ করুন (সমস্ত টেবিল স্টাফ তৈরি করতে চাইলে আনটিক ডিডিএল)।


1
এটি স্পষ্টভাবে একটি এসকিউএল সার্ভারের প্রশ্ন হিসাবে চিহ্নিত হয়েছে ...
বেন্টঅনকোডিং

এসকিউএল সার্ভারের সাথে ওরাকল এসকিএল বিকাশকারী ব্যবহার করাও সম্ভব possible আমি আমার প্রতিক্রিয়া সম্পাদনা করেছি।
লিয়াম

0

আমি এই এসএমএসএস বুস্ট অ্যাডনটি পেয়েছি যা নিখরচায় এবং অন্যান্য কাজের মধ্যে ঠিক এটি করে। আপনি ফলাফলগুলিতে ডান ক্লিক করতে পারেন এবং স্ক্রিপ্ট ডেটা হিসাবে নির্বাচন করতে পারেন।


আমি স্ক্রিপ্ট গ্রিড ডেটা দেখি তবে ফলাফল থেকে এসকিউএল সন্নিবেশ করি না
কিউকিনেট

0

আপনি এই Q2C.SSMSPlugin ব্যবহার করতে পারেন যা নিখরচায় এবং মুক্ত উত্স। আপনি ডান ক্লিক করতে পারেন এবং "কমান্ড থেকে জিজ্ঞাসা কার্য সম্পাদন করুন ... -> সন্নিবেশের জন্য প্রশ্ন ..." নির্বাচন করতে পারেন। উপভোগ করুন)


এসএসএমএস 2012 এর জন্য বৈধ?
কিকিনেট

-1

আপনি একটি INSERT INTO SELECTবিবৃতি ব্যবহার করতে পারেন , একটি নির্বাচিত ক্যোয়ারির ফলাফলগুলি একটি সারণীতে সন্নিবেশ করানোর জন্য। http://www.w3schools.com/sql/sql_insert_into_select.asp

উদাহরণ:

INSERT INTO Customers (CustomerName, Country) SELECT SupplierName, Country FROM Suppliers WHERE Country='Germany';

1
একটি নির্বাচন বিবৃতি INSERT বিবৃতিতে রূপান্তর থেকে ফলাফলের সাথে এর কোনও মিল নেই এটি কেবল সরল INSERT বিবৃতি।
নীলস লুকাস

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