SQL सर्वर में एक तालिका का नाम कैसे बदलें?


369

SQLमेरे द्वारा उपयोग की जाने वाली क्वेरी है:

ALTER TABLE oldtable RENAME TO newtable;

लेकिन, यह मुझे एक त्रुटि देता है।

सर्वर: Msg 156, लेवल 15, स्टेट 1, लाइन 1
कीवर्ड 'TO' के पास गलत सिंटैक्स।

जवाबों:


683

SQL सर्वर में एक तालिका का नाम बदलने के लिए, sp_renameकमांड का उपयोग करें :

exec sp_rename 'schema.old_table_name', 'new_table_name'

7
एक और बात: यदि तालिका के किसी भी नाम .में उनमें से एक है, []तो तालिका नाम के आसपास का उपयोग करें। (मुझे पता है, मुझे पता है, लेकिन डॉट्स हो सकते हैं ...) Eg sp_rename '[Stupid.name]', 'NewName'या स्कीमा के साथsp_rename '[dbo.Stupid.name]', 'NewName'
खाली करें

55
और जोड़ने के लिए, नहीं है गलती में स्कीमा डाल 'NewName'क्षेत्र, अन्यथा अपनी मेज की तरह कुछ के लिए देख खत्म हो सकता है dbo.dbo.NewName
माइकल प्लात्ज़

4
ध्यान रखें कि एक तालिका का नाम बदलने के दौरान, आप लगभग निश्चित रूप से उस तालिका के किसी भी संदर्भ का नाम बदलना चाहते हैं जो संग्रहीत कार्यविधियों, विचारों, कार्यों आदि में मौजूद हो सकता है। एक त्वरित Google कई उपकरणों में से एक पा सकता है जो आपके लिए ऐसा कर सकता है। । या आप एक स्क्रिप्ट का उपयोग कर सकते हैं जो इन सभी वस्तुओं में एक स्ट्रिंग को ढूंढती है, और उन्हें ALTER कथनों के रूप में पेस्ट करती है, और एक खोज-और-प्रतिस्थापित करें, फिर उन सभी को चलाएं।
MGOwen

2
आप नई तालिका की ओर इशारा करते हुए पुराने तालिका के नाम के साथ एक पर्यायवाची नाम भी बना सकते हैंCREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
रस्किन

वर्ग कोष्ठक में नया नाम न रखें! अन्यथा तालिका में नाम में वर्ग कोष्ठक होंगे। तो: 'new_table_name' - सही है, '[new_table_name]' - आपको परेशानी में
डालेगा

143

एक स्तंभ का नाम बदलने के लिए:

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

एक तालिका का नाम बदलने के लिए:

sp_rename 'old_table_name','new_table_name';

डिफ़ॉल्ट dbo के अलावा अन्य स्कीमाओं को संभालने का तरीका नहीं समझाता।
साल

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_renameLockMatchID त्रुटि की कोशिश करते हैं और प्राप्त करते हैं तो पहले एक उपयोग [डेटाबेस] स्टेटमेंट जोड़ने में मदद मिल सकती है:

मैंने कोशिश की

 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', 'userName', 'COLUMN'
sebastian.roibu


0

यहां प्रस्तावित से कुछ भी काम नहीं हुआ .. तो बस डेटा को नई तालिका में डाल दिया

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

शायद किसी के लिए उपयोगी होगा ..

मेरे मामले में यह नया स्कीमा भी नहीं जानता था कि dbo मालिक था ..

अपडेट करें

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.