এসকিউএল সার্ভারে কোনও টেবিলটির নামকরণ কীভাবে করবেন?


369

SQLক্যোয়ারী যে আমি ব্যবহার করেছি হল:

ALTER TABLE oldtable RENAME TO newtable;

কিন্তু, এটি আমাকে একটি ত্রুটি দেয়।

সার্ভার: এমএসজি 156, স্তর 15, রাজ্য 1, লাইন 1
'TO' কীওয়ার্ডের নিকটে ভুল সিনট্যাক্স।

উত্তর:


683

এসকিউএল সার্ভারে একটি সারণীর নাম পরিবর্তন করতে, sp_renameকমান্ডটি ব্যবহার করুন :

exec sp_rename 'schema.old_table_name', 'new_table_name'

7
আরও একটি জিনিস: যদি টেবিলের নামের কোনও একটিতে থাকে তবে টেবিলের নামটি .ব্যবহার করুন []। (আমি জানি, আমি জানি, তবে বিন্দুগুলি ঘটতে পারে ...) উদাহরণস্বরূপ sp_rename '[Stupid.name]', 'NewName'বা স্কিমা সহsp_rename '[dbo.Stupid.name]', 'NewName'
ফাঁকা দিন

55
আর যোগ করতে না ঘটনাক্রমে এ স্কিমা করা 'NewName'ক্ষেত্র, অন্যথায় আপনার টেবিল ভালো কিছু খুঁজছেন শেষ পর্যন্ত হতে পারে dbo.dbo.NewName
মাইকেল প্লুটজ

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

2
পুরানো টেবিলের নাম অনুসারে নতুন টেবিলের দিকে ইশারা করে আপনি একটি প্রতিশব্দ তৈরি করতে পারেনCREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
রাসকিন

বর্গাকার বন্ধনীতে নতুন নাম রাখবেন না! অন্যথায় টেবিলের নামে বর্গাকার বন্ধনী থাকবে। সুতরাং: 'নতুন_সারণযোগ্য_নাম' - সঠিক, '[নতুন_সারণযোগ্য_নাম' '- আপনাকে সমস্যায়
ফেলবে

143

একটি কলামের নাম পরিবর্তন করতে:

sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';

একটি সারণীর নামকরণ করতে:

sp_rename 'old_table_name','new_table_name';

ডিফল্ট ডিবো ছাড়াও কীভাবে স্কিমার পরিচালনা করবেন তা ব্যাখ্যা করে না।
সাল

1
@ সাল এখানে অন্য কোনও উত্তর চেয়ে কম? আপনি কীভাবে কোনও টেবিলের স্কিমা পরিবর্তন করবেন তা সন্ধান করছেন ?
বেকন বিট

14

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

আমি এখানে পিনাল ডেভের ব্লগে টেবিল নির্ভরতার জন্য একটি কোড উদাহরণ নিয়েছি

USE AdventureWorks
GO
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Customer'

সুতরাং, এই সমস্ত নির্ভরশীল অবজেক্টগুলিকেও আপডেট করা দরকার

অথবা আপনি যদি পারেন তবে কিছু অ্যাড-ইন ব্যবহার করুন, তাদের মধ্যে কয়েকটিতে অবজেক্টের নামকরণের বৈশিষ্ট্য রয়েছে এবং সমস্ত নির্ভরশীল, এনট অবজেক্টগুলিও রয়েছে


11

আপনি যদি exec sp_renameলক ম্যাচআইডিআইডি ত্রুটিটি চেষ্টা করে ও গ্রহণ করেন তবে এটি প্রথমে একটি ব্যবহার [ডাটাবেস] বিবৃতি যুক্ত করতে সহায়তা করতে পারে:

আমি চেষ্টা করেছিলাম

 exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
 -- Invalid EXECUTE statement using object "Object", method "LockMatchID".

এটি ঠিক করতে আমাকে যা করতে হয়েছিল তা তা এটিকে আবার লিখতে হয়েছিল:

use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';

10

সারণীর নাম

sp_rename 'db_name.old_table_name', 'new_table_name'

স্তম্ভ

sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'

সূচক

sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'

স্ট্যাটিক্স এবং ডেটাটাইপগুলির জন্যও উপলব্ধ


2
কলামের জন্য আপনি প্রথম এবং দ্বিতীয় পরামিতিগুলির মধ্যে কমা মিস করছেন। এটি হওয়া উচিত: sp_rename 'db_name.old_table_name.name', 'ব্যবহারকারীর নাম', 'COLUMN'
সেবাস্তিয়ান.রোইবু


0

প্রস্তাবিত থেকে এখানে কোনও কাজ হয়নি .. সুতরাং কেবলমাত্র নতুন টেবিলে ডেটাটি ছিটিয়ে দেওয়া হয়েছে

SELECT * 
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];

কারও জন্য দরকারী হতে পারে ..

আমার ক্ষেত্রে এটি নতুন স্কিমাটিকে স্বীকৃতি দেয়নি এটির ডিবিওও ছিল মালিক ..

হালনাগাদ

EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';

আমার জন্য কাজ করেছেন। সারণীর একটির জন্য পিকে আপডেট করার সময় আমি এটি স্বয়ংক্রিয়ভাবে উত্পন্ন স্ক্রিপ্ট থেকে পেয়েছি। এইভাবে এটি নতুন স্কিমাকেও স্বীকৃতি দিয়েছে ...


0

একটি আলাদা স্কিমা সহ একটি টেবিলের নাম পরিবর্তন করতে:

উদাহরণ: dbo.MyTable1 কে wrk.MyTable2 এ পরিবর্তন করুন

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

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