sql >> Databáze >  >> RDS >> Sqlserver

Jak změnit schéma všech tabulek, pohledů a uložených procedur v MSSQL

Ano, je to možné.

Chcete-li změnit schéma databázového objektu, musíte spustit následující skript SQL:

ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName

Kde ObjectName může být název tabulky, pohledu nebo uložené procedury. Problém se zdá být získání seznamu všech databázových objektů s daným názvem shcema. Naštěstí existuje systémová tabulka s názvem sys.Objects, která ukládá všechny databázové objekty. Následující dotaz vygeneruje všechny potřebné SQL skripty k dokončení tohoto úkolu:

SELECT 'ALTER SCHEMA NewSchemaName TRANSFER [' + SysSchemas.Name + '].[' + DbObjects.Name + '];'
FROM sys.Objects DbObjects
INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id
WHERE SysSchemas.Name = 'OldSchemaName'
AND (DbObjects.Type IN ('U', 'P', 'V'))

Kde typ „U“ označuje uživatelské tabulky, „V“ označuje pohledy a „P“ označuje uložené procedury.

Spuštěním výše uvedeného skriptu se vygenerují příkazy SQL potřebné k přenosu objektů z jednoho schématu do druhého. Něco takového:

ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.CONTENT_KBArticle;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Proc_Analytics_Statistics_Delete;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Proc_CMS_QueryProvider_Select;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.COM_ShoppingCartSKU;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.CMS_WebPart;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Polls_PollAnswer;

Nyní můžete spustit všechny tyto vygenerované dotazy k dokončení operace přenosu.



  1. 4 způsoby, jak změnit časové pásmo v Oracle

  2. mysql_fetch_assoc():zadaný argument není platným zdrojem výsledků MySQL v php

  3. MySQL - GROUP BY s ORDER DESC nefunguje

  4. Jak zruším omezení cizího klíče, pouze pokud existuje na serveru SQL?