sql-server - tutorial - w3schools sql




SQL সার্ভার টেবিলের জন্য INSERT বিবৃতিগুলি স্বয়ংক্রিয়ভাবে জেনারেট করার সেরা উপায় কী? (13)

@ মাইক রিটকো দ্বারা উল্লেখ করা হয়েছে তবে এসএসএমএস 2008 R2 এর জন্য আপডেট করা হয়েছে

  1. ডান ডাটাবেস নাম উপর ক্লিক করুন
  2. টাস্ক> স্ক্রিপ্ট জেনারেট করুন চয়ন করুন
  3. আপনার সেটিংসের উপর নির্ভর করে প্রাতিষ্ঠানিক পৃষ্ঠাটি প্রদর্শন করতে পারে বা না
  4. 'নির্দিষ্ট ডাটাবেস বস্তু নির্বাচন করুন' নির্বাচন করুন,
  5. গাছের দৃশ্য প্রসারিত করুন এবং প্রাসঙ্গিক টেবিল পরীক্ষা করুন
  6. পরবর্তী ক্লিক করুন
  7. উন্নত ক্লিক করুন
  8. সাধারণ বিভাগের অধীনে, 'স্ক্রিপ্টের ডেটা প্রকারের' জন্য উপযুক্ত বিকল্পটি নির্বাচন করুন
  9. উইজার্ড সম্পূর্ণ করুন

এসএসএমএসের বাইরে সরাসরি তথ্য দেওয়ার জন্য আপনি ইনসার্ট স্টেটমেন্টের সমস্ত তথ্য পাবেন।

2016-10-25 এসকিউএল সার্ভার 2016 / এসএসএমএস 13.0.15900.1 সম্পাদনা করুন

  1. ডান ডাটাবেস নাম উপর ক্লিক করুন

  2. টাস্ক> স্ক্রিপ্ট জেনারেট করুন চয়ন করুন

  3. আপনার সেটিংসের উপর নির্ভর করে প্রাতিষ্ঠানিক পৃষ্ঠাটি প্রদর্শন করতে পারে বা না

  4. 'নির্দিষ্ট ডাটাবেস বস্তু নির্বাচন করুন' নির্বাচন করুন,

  5. গাছের দৃশ্য প্রসারিত করুন এবং প্রাসঙ্গিক টেবিল পরীক্ষা করুন

  6. পরবর্তী ক্লিক করুন

  7. উন্নত ক্লিক করুন

  8. সাধারণ বিভাগের অধীনে, 'স্ক্রিপ্টের ডেটা প্রকারের' জন্য উপযুক্ত বিকল্পটি নির্বাচন করুন

  9. ঠিক আছে ক্লিক করুন

  10. আউটপুট একটি নতুন ক্যোয়ারী, ক্লিপবোর্ড বা একটি ফাইলে যেতে চান কিনা তা চয়ন করুন

  11. দুইবার পরবর্তী ক্লিক করুন

  12. আপনার স্ক্রিপ্ট আপনি উপরে বাছাই সেটিংস অনুযায়ী প্রস্তুত করা হয়

  13. শেষ ক্লিক করুন

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

প্রতিবারই আমরা প্রাসঙ্গিক টেবিলের "রিফ্রেশ" করতে চাই, যার অর্থ হল তাদের সবগুলি ড্রপ করা, পুনরায় তৈরি করা, এবং একটি সংরক্ষিত MS অ্যাক্সেস অ্যাডেন্ড ক্যোয়ারী চালানো।

প্রথম অংশ (ড্রপ এবং পুনরায় তৈরি) একটি সহজ এসকিউএল স্ক্রিপ্ট, কিন্তু শেষ অংশ আমাকে cringe করে তোলে। আমি একটি একক সেটআপ স্ক্রিপ্ট চাই যা ডামি ডেটা পুনরায় জেনারেট করতে INSERT গুলির একটি গুচ্ছ আছে।

আমি এখন টেবিলে তথ্য আছে। স্বয়ংক্রিয়ভাবে সেই ডেটাসেট থেকে INSERT বিবৃতিগুলির একটি বড় তালিকা তৈরি করার সেরা উপায় কী?

আমি এটি করার একমাত্র উপায়টি হল একটি এক্সেল শীটে টেবিল সংরক্ষণ করা এবং তারপরে প্রতিটি সারির জন্য একটি ইনসার্ট তৈরি করতে একটি এক্সেল সূত্র লিখুন, যা অবশ্যই সর্বোত্তম উপায় নয়।

আমি একটি SQL সার্ভার 2005 ডাটাবেস সংযোগ করতে 2008 ম্যানেজমেন্ট স্টুডিও ব্যবহার করছি।


Sp_generate_inserts এর প্রথম লিঙ্কটি বেশ শান্ত, এখানে একটি সত্যিই সহজ সংস্করণ:

DECLARE @Fields VARCHAR(max); SET @Fields = '[QueueName], [iSort]' -- your fields, keep []
DECLARE @Table  VARCHAR(max); SET @Table  = 'Queues'               -- your table

DECLARE @SQL    VARCHAR(max)
SET @SQL = 'DECLARE @S VARCHAR(MAX)
SELECT @S = ISNULL(@S + '' UNION '', ''INSERT INTO ' + @Table + '(' + @Fields + ')'') + CHAR(13) + CHAR(10) + 
 ''SELECT '' + ' + REPLACE(REPLACE(REPLACE(@Fields, ',', ' + '', '' + '), '[', ''''''''' + CAST('),']',' AS VARCHAR(max)) + ''''''''') +' FROM ' + @Table + '
PRINT @S'

EXEC (@SQL)

আমার সিস্টেমে, আমি এই ফলাফল পেতে:

INSERT INTO Queues([QueueName], [iSort])
SELECT 'WD: Auto Capture', '10' UNION 
SELECT 'Car/Lar', '11' UNION 
SELECT 'Scan Line', '21' UNION 
SELECT 'OCR', '22' UNION 
SELECT 'Dynamic Template', '23' UNION 
SELECT 'Fix MICR', '41' UNION 
SELECT 'Fix MICR (Supervisor)', '42' UNION 
SELECT 'Foreign MICR', '43' UNION 
...

আপনি এসএসএমএস সরঞ্জাম প্যাক ব্যবহার করতে পারেন (SQL সার্ভার 2005 এবং 2008 এর জন্য উপলব্ধ)। এটি সন্নিবেশ বিবৃতি উৎপাদনের জন্য একটি বৈশিষ্ট্য সঙ্গে আসে।

http://www.ssmstoolspack.com/


আমরা এই সংরক্ষিত পদ্ধতি ব্যবহার করি - এটি আপনাকে নির্দিষ্ট টেবিলগুলিকে লক্ষ্য করতে এবং যেখানে ক্লজগুলি ব্যবহার করতে দেয়। আপনি here টেক্সট খুঁজে পেতে পারেন।

উদাহরণস্বরূপ, এটি আপনাকে এটি করতে দেয়:

EXEC sp_generate_inserts 'titles'

আমি আমার ব্লগে এই script ব্যবহার করেছি ( এসকিউএল সার্ভারে সন্নিবেশ বিবৃতি পদ্ধতিগুলি কীভাবে তৈরি করবেন )।

এ পর্যন্ত আমার জন্য কাজ করেছে, তবে তারা এখনও আবিষ্কার করা হয়নি এমন বাগ হতে পারে।


আমি এই কাজ sqlite ব্যবহার। আমি স্ক্র্যাচ / পরীক্ষা ডাটাবেস তৈরি করার জন্য খুব দরকারী, এটি খুব দরকারী।

sqlite3 foo.sqlite .dump > foo_as_a_bunch_of_inserts.sql


এটি Visual Studio ব্যবহার করেও করা যেতে পারে (অন্তত সংস্করণ 2013 এর পরে)।

ভিএস ২013-এ সন্নিবেশ বিবৃতির উপর ভিত্তি করে সারিগুলির তালিকা ফিল্টার করাও সম্ভব, এটি যেমন SSMS তে আমি জানি না তেমন কিছু।

নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  • "SQL সার্ভার অবজেক্ট এক্সপ্লোরার" উইন্ডোটি খুলুন (মেনু: / দেখুন / SQL সার্ভার অবজেক্ট এক্সপ্লোরার)
  • ডাটাবেস এবং তার টেবিল খুলুন / প্রসারিত
  • টেবিলে ডান ক্লিক করুন এবং প্রসঙ্গ মেনু থেকে "তথ্য দেখুন" নির্বাচন করুন
  • এটি প্রধান এলাকায় তথ্য প্রদর্শন করবে
  • ঐচ্ছিক পদক্ষেপ: ফিল্টার আইকনের উপর ক্লিক করুন "সাজান এবং ফিল্টার তথ্য সেট" (ফলাফলের উপরে সারির বাম দিক থেকে চতুর্থ আইকন) এবং এক বা একাধিক কলামে কিছু ফিল্টার প্রয়োগ করুন
  • "স্ক্রিপ্ট" বা "স্ক্রিপ্ট টু ফাইল" আইকনে ক্লিক করুন (শীর্ষ সারির ডান দিকের আইকনগুলি, তারা কাগজে ছোট শীটগুলির মত দেখায়)

এটি নির্বাচিত সারণির জন্য সক্রিয় উইন্ডো বা ফাইলটিতে (শর্তাধীন) সন্নিবেশ বিবৃতি তৈরি করবে।


"ফিল্টার" এবং "স্ক্রিপ্ট" বোতাম ভিজ্যুয়াল স্টুডিও 2013 :


কেন শুধু তার সাথে আপনার কাজ করার আগে ডেটা ব্যাকআপ করবেন না, তারপরে রিফ্রেশ করতে চান তখন পুনরুদ্ধার করুন?

আপনি যদি http://vyaskn.tripod.com/code.htm#inserts করতে চান তবে চেষ্টা করুন: http://vyaskn.tripod.com/code.htm#inserts


ঢালাই ব্যবহার করবেন না, BCP ব্যবহার করুন


নিশ্চিত না হলে, আমি সঠিকভাবে আপনার প্রশ্ন বুঝতে।

আপনার যদি MS-Access এ ডেটা থাকে তবে আপনি এটি SQL সার্ভারে সরাতে চান - আপনি DTS ব্যবহার করতে পারেন।
এবং, আমি অনুমান করছি আপনি এসকিউএল প্রোফাইলারটি ব্যবহার করতে পারেন সমস্ত INSERT বিবৃতির দ্বারা যাচ্ছি, আমি মনে করি।


যদি আপনার কোন প্রোগ্রাম্যাটিক অ্যাক্সেস প্রয়োজন হয়, তবে আপনি একটি মুক্ত উত্স সংরক্ষিত প্রক্রিয়াটি তৈরি করতে পারেন 'জেনারেটইনসার্ট।

ইনসার্ট বিবৃতি জেনারেটর

একটি সহজ এবং দ্রুত উদাহরণ হিসাবে, একটি টেবিলের জন্য INSERT বিবৃতি তৈরি করতে AdventureWorks.Person.AddressType নিম্নলিখিত বিবৃতিগুলি কার্যকর করুন:

USE [AdventureWorks];
GO
EXECUTE dbo.GenerateInsert @ObjectName = N'Person.AddressType';

এটি নিম্নলিখিত স্ক্রিপ্ট তৈরি করবে:

SET NOCOUNT ON
SET IDENTITY_INSERT Person.AddressType ON
INSERT INTO Person.AddressType
([AddressTypeID],[Name],[rowguid],[ModifiedDate])
VALUES
 (1,N'Billing','B84F78B1-4EFE-4A0E-8CB7-70E9F112F886',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(2,N'Home','41BC2FF6-F0FC-475F-8EB9-CEC0805AA0F2',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(3,N'Main Office','8EEEC28C-07A2-4FB9-AD0A-42D4A0BBC575',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(4,N'Primary','24CB3088-4345-47C4-86C5-17B535133D1E',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(5,N'Shipping','B29DA3F8-19A3-47DA-9DAA-15C84F4A83A5',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(6,N'Archive','A67F238A-5BA2-444B-966C-0467ED9C427F',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
SET IDENTITY_INSERT Person.AddressType OFF

সমস্যাটি আমার অবদান, একটি পাওয়ারশেল ইনসার্ট স্ক্রিপ্ট জেনারেটর যা আপনাকে কষ্টকর SSMS GUI ব্যবহার না করে একাধিক সারণী স্ক্রিপ্ট করতে দেয়। সোর্স নিয়ন্ত্রণে দ্রুত "বীজ" ডেটা ধরে রাখার জন্য দুর্দান্ত।

  1. নীচের স্ক্রিপ্টটি "filename.ps1" হিসাবে সংরক্ষণ করুন।
  2. "আমাকে কাস্টমাইজ করুন" এর অধীনে এলাকায় আপনার নিজস্ব পরিবর্তন করুন।
  3. আপনি কোন ক্রম স্ক্রিপ্ট তালিকার তালিকা যোগ করতে পারেন।
  4. আপনি Powershell ISE স্ক্রিপ্টটি খুলতে এবং Play বাটনে আঘাত করতে পারেন, বা কেবল Powershell কমান্ড প্রম্পটে স্ক্রিপ্টটি চালান।

ডিফল্টরূপে, তৈরি করা INSERT স্ক্রিপ্টটি স্ক্রিপ্টের মতো একই ফোল্ডারে "SeedData.sql" হবে।

আপনি ইনস্টল করা এসকিউএল সার্ভার ম্যানেজমেন্ট অবজেক্টস অ্যাসেম্বলি প্রয়োজন হবে, আপনি এসএসএমএস ইনস্টল করা আছে, যা সেখানে থাকা উচিত।

Add-Type -AssemblyName ("Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
Add-Type -AssemblyName ("Microsoft.SqlServer.ConnectionInfo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")



#CUSTOMIZE ME
$outputFile = ".\SeedData.sql"
$connectionString = "Data Source=.;Initial Catalog=mydb;Integrated Security=True;"



$sqlConnection = new-object System.Data.SqlClient.SqlConnection($connectionString)
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conn)
$db = $srv.Databases[$srv.ConnectionContext.DatabaseName]
$scr = New-Object Microsoft.SqlServer.Management.Smo.Scripter $srv
$scr.Options.FileName = $outputFile
$scr.Options.AppendToFile = $false
$scr.Options.ScriptSchema = $false
$scr.Options.ScriptData = $true
$scr.Options.NoCommandTerminator = $true

$tables = New-Object Microsoft.SqlServer.Management.Smo.UrnCollection



#CUSTOMIZE ME
$tables.Add($db.Tables["Category"].Urn)
$tables.Add($db.Tables["Product"].Urn)
$tables.Add($db.Tables["Vendor"].Urn)



[void]$scr.EnumScript($tables)

$sqlConnection.Close()

GenerateData জন্য একটি আশ্চর্যজনক হাতিয়ার। সোর্স কোডটি আপনার কাছে উপলভ্য হওয়ার কারণে এটিতে খুব সহজে এটি তৈরি করা যায়। কয়েকটি চমৎকার বৈশিষ্ট্য:

  • নাম এবং স্থান জন্য নাম জেনারেটর
  • জেনারেশন প্রোফাইল সংরক্ষণ করার ক্ষমতা (এটি ডাউনলোড এবং স্থানীয়ভাবে সেট আপ করার পরে)
  • স্ক্রিপ্ট মাধ্যমে প্রজন্মের কাস্টমাইজ এবং ম্যানিপুলেশন করার ক্ষমতা
  • তথ্যের জন্য অনেকগুলি ভিন্ন আউটপুট (CSV, জাভাস্ক্রিপ্ট, JSON, ইত্যাদি) (যদি আপনি বিভিন্ন পরিবেশে সেটটি পরীক্ষা করতে এবং ডাটাবেস অ্যাক্সেসটি এড়িয়ে যেতে চান তবে)
  • বিনামূল্যে । কিন্তু আপনি সফটওয়্যার দরকারী খুঁজে যদি দান বিবেচনা করুন :)।








code-generation