2017-11-03 14 views
3

これは広い質問ですが、私の疑問に答えるオンラインのリソースはないようです。Sql server-テーブル名の名前を変更すると悪影響がありますか?

テーブルの名前をsql serverに変更すると、テーブルのルーツに影響を与えたり破損したりする可能性があるというメッセージが表示されます。

これはどういう意味ですか?

実際にはストアドプロシージャまたはスクリプトが壊れていますか?

+1

を作成します。あなたはその名前で何かを参照し、それを変更します。はい、それは壊れています。そのテーブル名のすべてのインスタンスの名前は変更されません。 – Leonidas199x

+1

カラムの名前を変更する場合は、そのテーブルにフロントエンドアプリケーションがあるかどうかを検討する必要があります。彼らはそれから壊れます。特定の列を指定してもビューが破損する可能性があります。 – plaidDK

答えて

4

それを参照しているルーチンを壊すでしょう。 (あなたは、サーバー側のファイルを探している場合、それは最高になり、また

DECLARE @SearchWord NVARCHAR(128) = 'table' 

SELECT ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%'[email protected]+'%' 
UNION 
SELECT OBJECT_NAME(id) 
FROM SYSCOMMENTS 
WHERE [text] LIKE '%'[email protected]+'%' 
GROUP BY OBJECT_NAME(id) 
UNION 
SELECT OBJECT_NAME(object_id) 
FROM sys.sql_modules 
WHERE definition LIKE '%'[email protected]+'%' 

RETURN 

SELECT * 
FROM sys.dm_sql_referenced_entities ('dbo.table', 'OBJECT') 

SELECT * 
FROM sys.dm_sql_referencing_entities ('dbo.table', 'OBJECT') 

enter image description here

をするか、次のスクリプト:あなたはそれを参照しているオブジェクトを見つけるためにあなたの管理のスタジオを使用することができますasp、.net)、テーブルがSSISパッケージまたはレポートファイル(.rdl)で使用されているかどうかを確認します。

+0

テーブルの名前を変更するときに何かを壊さないためにSYNONYMヘルプを作成できますか? –

+0

私たちは私たちの生産でこれをしました。 'DROP TABLE'は正規化を適用するために(テーブルは5つの別々のテーブルに分割されていました)、最初のテーブル名と同じ名前の' view'を作成します。すべての古いコードを書き換えることができないため、これは良いことでしたが、新しいコードを最適化したいと考えています。 – gotqn

+1

私は推測[同義語](http://www.sqlservercentral。com/articles /類義語/ 115072 /)がさらに優れている可能性があります。テーブルの名前を変更してください。次に、 'CREATE SYNONYM dbo.OldTableName FOR dbo.NewTableName; 'を使用し、古いテーブル名を参照していたすべてのコードは、クエリオプティマイザが影響を受けなくても(ビューとは対照的に)動作します。しかし、私はそれらを自分で使ったことはないので、私は尋ねました。 –

3

ViewsとUDFには、SCHEMABINDINGオプションが存在すると考えてください。これらを使用すると、ViewまたはUDFが依存する基になるテーブル/ビューが(名前の変更などによって)変更されないようにすることができます。

ただし、デフォルトではオフになっていますオプションです。b)ストアドプロシージャでは使用できません。名前解決が遅れて完全に逆方向になります。

したがって、ビュー、UDF、およびストアドプロシージャの定義は、テーブルの名前を変更することによってすべて無効にすることができ、最初の2つはSCHEMABINDINGを使用して保護することができます。

2

変更された列にどのような影響があるかわからない場合は、たとえば、画像が表示されます。

場合ビュー

enter image description here

編集列名とビューから enter image description here

を選択するコード

/****** Script for SelectTopNRows command from SSMS ******/ 

    /*Main table*/ 
SELECT TOP 1000 [Person] 
    ,[Book] 
FROM [LegOgSpass].[dbo].[Books] 


/*Create view*/ 
create view dbo.booksview as 

select person,Book from dbo.Books 

/*Selcet from view*/ 
Select * from dbo.booksview 


/*Change column name*/ 
/****** Object: Table [dbo].[Books] Script Date: 03-11-2017 09:42:52 ******/ 
    DROP TABLE [dbo].[Books] 
GO 

/****** Object: Table [dbo].[Books] Script Date: 03-11-2017 09:42:52 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Books](
[PersonNEW] [nvarchar](50) NULL, 
[Book] [nvarchar](50) NULL 
) ON [PRIMARY] 

GO 

/*Select from view again with Person changed to PersonNew*/ 
Select * from dbo.booksview 
関連する問題