আমি কীভাবে ডিবিওতে ডিবি স্কিমা পরিবর্তন করব


115

আমি আমার ২০০৮ এর ডাটাবেসে একটি পুরানো স্কিএল সার্ভার (2000) থেকে একগুচ্ছ টেবিল আমদানি করেছি। সকল আমদানিকৃত টেবিল, আমার ব্যবহারকারী নাম প্রিফিক্স করা উদাহরণস্বরূপ: jonathan.MovieData। সারণীতে propertiesএটি jonathanডিবি স্কিমা হিসাবে তালিকাবদ্ধ করে। আমি যখন সঞ্চিত প্রক্রিয়াগুলি লিখি তখন আমাকে এখন jonathan.সমস্ত টেবিলের নাম অন্তর্ভুক্ত করতে হবে যা বিভ্রান্তিকর।

আমি কীভাবে আমার সমস্ত টেবিলকে জোনাথনের পরিবর্তে ডিবিওতে পরিবর্তন করব?

বর্তমান ফলাফল: jonathan.MovieData

কাঙ্ক্ষিত ফলাফল: dbo.MovieData

উত্তর:


179
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

ALTER SCHEMA দেখুন ।

সাধারণীকরণ সিনট্যাক্স:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 

12
গুগলারের জন্য সময় বাঁচানোর জন্য: স্কেমা টার্গেটসচেমা ট্রান্সফার সোর্সচেমা.ট্যাবলনাম;
Co7e

1
ALTER স্কিমা dbo স্থানান্তরণ "DOMAIN এর \ ব্যবহারকারী" .tableName: ব্যবহারকারী একটি ব্যাকস্ল্যাশ নিম্নলিখিত চালানো থাকে
PatricF

@PatricF দ্য উদ্ধৃত শনাক্তকারী নিয়ম শুধু অন্য কোন নাম হিসেবে স্কিমা নাম প্রযোজ্য: [DOMAIN\user].[tableName]। এসকিউএল সার্ভার সম্প্রদায়ে সাধারণভাবে লেনদেন-এসকিউএল উদ্ধৃত শনাক্তকারীগুলি ব্যবহার করা হয় ( [এবং ]), এর "জন্য নির্দিষ্ট নির্দিষ্ট প্রয়োজনীয়তা না থাকলে এড়াতে হবে।
রিমাস রুসানু

হিসাবে তিনি চাইলেন আমার সমস্ত টেবিল , চেক এই এবং এই একক বিবৃতিতে এটা করতে, আশা কেউ সাহায্য করে।
শাইজুট

2
@ লেলিগ্রো ব্যবহার করুন [এবং ]অন্য কোনও ক্ষেত্রে যেমন আপনি যখন এসকিউএল অবজেক্টের নাম সম্পর্কে সুনির্দিষ্ট হতে চান। [domain\user123].TableName
রেমাস রুসানু

40

আপনি নিম্নলিখিতটি চালাতে পারেন, যা আপনার সমস্ত তালিকার জন্য ALTER sCHEMA বিবৃতিগুলির একটি সেট তৈরি করবে:

SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'

তারপরে আপনাকে কোয়েরি বিশ্লেষকটিতে বিবৃতিগুলি অনুলিপি করে চালাতে হবে।

এখানে একটি পুরানো স্ক্রিপ্ট যা এটি আপনার জন্যও করবে, আমিও মনে করি অবজেক্টের মালিক পরিবর্তন করে। যদিও এটি 2008 সালে চেষ্টা করে দেখেনি।

DECLARE @old sysname, @new sysname, @sql varchar(1000)

SELECT
  @old = 'jonathan'
  , @new = 'dbo'
  , @sql = '
  IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
  WHERE
      QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
      AND TABLE_SCHEMA = ''' + @old + '''
  )
  EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''

EXECUTE sp_MSforeachtable @sql

এই সাইট থেকে এটি পেয়েছি ।

আপনার যদি প্রয়োজন হয় তবে এটি স্ট্রাকড প্রোকগুলির জন্য একই কাজ করার কথা বলে।


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

আপনি কি আপনার সমস্ত ALTER SCHEMA বিবৃতি স্বয়ংক্রিয়ভাবে উত্পন্ন করতে উপরে নির্বাচন করা INFORMATION_SCHEMA ব্যবহার করতে সক্ষম নন?
প্যাটমোরটেক

INFORMATION_SCHEMA.TABLES এর ডকুমেন্টেশন থেকে নিম্নলিখিত উদ্ধৃতিটি নোট করুন : " গুরুত্বপূর্ণ কোনও বস্তুর স্কিমা নির্ধারণের জন্য INFORMATION_SCHEMA মতামত ব্যবহার করবেন না an সুতরাং, পরিবর্তে উদাহরণটি আবার লিখতে হবে sys.tables(sys.objects এর একটি উপসেট)।
হেইনজি


15

ডিবিও স্কিমা থেকে মাইস্কেমে টেবিলটি সরান:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable


মাইস্কেমা থেকে ডিবিও স্কিমাতে সারণী সরান:

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable

9

আমি কেবল এটি একটি অনুরূপ প্রশ্নের জন্য পোস্ট করেছি: স্কেল সার্ভার 2005-এ, আমি কোনও তথ্য না হারিয়ে কীভাবে কোনও টেবিলের "স্কিমা" পরিবর্তন করব?


একজন সামান্য sAeid এর চমৎকার উত্তর উন্নতি ...

আমি এই কোডটি স্ব-কার্যকর করতে একটি নির্বাহককে যুক্ত করেছি এবং আমি শীর্ষে একটি ইউনিয়ন যুক্ত করেছি যাতে আমি উভয় টেবিল এবং সঞ্চিত পদ্ধতিগুলির স্কিমা পরিবর্তন করতে পারি:

DECLARE cursore CURSOR FOR 


select specific_schema as 'schema', specific_name AS 'name'
FROM INFORMATION_SCHEMA.routines
WHERE specific_schema <> 'dbo' 

UNION ALL

SELECT TABLE_SCHEMA AS 'schema', TABLE_NAME AS 'name'
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA <> 'dbo' 



DECLARE @schema sysname, 
 @tab sysname, 
 @sql varchar(500) 


OPEN cursore     
FETCH NEXT FROM cursore INTO @schema, @tab 

WHILE @@FETCH_STATUS = 0     
BEGIN 
 SET @sql = 'ALTER SCHEMA dbo TRANSFER [' + @schema + '].[' + @tab +']'    
 PRINT @sql   
 exec (@sql)  
 FETCH NEXT FROM cursore INTO @schema, @tab     
END 

CLOSE cursore     
DEALLOCATE cursore

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


একটি ট্রিট কাজ করে। ধন্যবাদ।
বিজিএক্স

5

আপনি এই পোস্টে বর্ণিত হিসাবে একাধিক ডাটাবেস অবজেক্টের ব্যাচ পরিবর্তন স্কিমার ব্যাচ করতে পারেন:

এমএসএসকিউএলে সমস্ত সারণী, দর্শন এবং সঞ্চিত পদ্ধতিগুলির স্কিমা কীভাবে পরিবর্তন করবেন


2

একটি পৃথক জিনিস জন্য এটি করার উপায়:

স্ক্রিনমা ডিবিও স্থানান্তর জোনাথন.মোভিডাটা


2

আমার অনুরূপ সমস্যা ছিল তবে আমার স্কিমাটিতে এতে ব্যাকস্ল্যাশ ছিল। এই ক্ষেত্রে, স্কিমা চারপাশে বন্ধনী অন্তর্ভুক্ত করুন।

ALTER SCHEMA dbo TRANSFER [DOMAIN\jonathan].MovieData;

2

এসএকিউএল সার্ভারকে এসএ অ্যাকাউন্ট হিসাবে খুলুন এবং নীচের প্রশ্নগুলি থেকে নতুন কোয়েরিতে ক্লিক করুন

তারপরে এক্সিকিউটে ক্লিক করুন, এটি সমস্ত মালিকানাধীন স্কিমা এসএ অ্যাকাউন্টে ফিরে যাবে

alter authorization on schema::[db_datareader] to [dbo]
alter authorization on schema::[db_datareader] to [db_datareader]
alter authorization on schema::[db_datawriter] to [dbo]
alter authorization on schema::[db_datawriter] to [db_datawriter]
alter authorization on schema::[db_securityadmin] to [dbo]
alter authorization on schema::[db_securityadmin] to [db_securityadmin]
alter authorization on schema::[db_accessadmin] to [dbo]
alter authorization on schema::[db_accessadmin] to [db_accessadmin]
alter authorization on schema::[db_backupoperator] to [dbo]
alter authorization on schema::[db_backupoperator] to [db_backupoperator]
alter authorization on schema::[db_ddladmin] to [dbo]
alter authorization on schema::[db_ddladmin] to [db_ddladmin]
alter authorization on schema::[db_owner] to [dbo]
alter authorization on schema::[db_owner] to [db_owner]

1

MS-সহায়তা: //MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/0a760138-460e-410a-a3c1-d60af03bf2ed.htm

পরিবর্তে SCHEMA স্কিমা_নাম ট্রান্সফার নিরাপদ_নাম

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