これは広い質問ですが、私の疑問に答えるオンラインのリソースはないようです。Sql server-テーブル名の名前を変更すると悪影響がありますか?
テーブルの名前をsql server
に変更すると、テーブルのルーツに影響を与えたり破損したりする可能性があるというメッセージが表示されます。
これはどういう意味ですか?
実際にはストアドプロシージャまたはスクリプトが壊れていますか?
これは広い質問ですが、私の疑問に答えるオンラインのリソースはないようです。Sql server-テーブル名の名前を変更すると悪影響がありますか?
テーブルの名前をsql server
に変更すると、テーブルのルーツに影響を与えたり破損したりする可能性があるというメッセージが表示されます。
これはどういう意味ですか?
実際にはストアドプロシージャまたはスクリプトが壊れていますか?
それを参照しているルーチンを壊すでしょう。 (あなたは、サーバー側のファイルを探している場合、それは最高になり、また
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')
:
をするか、次のスクリプト:あなたはそれを参照しているオブジェクトを見つけるためにあなたの管理のスタジオを使用することができますasp、.net)、テーブルがSSISパッケージまたはレポートファイル(.rdl)で使用されているかどうかを確認します。
テーブルの名前を変更するときに何かを壊さないためにSYNONYMヘルプを作成できますか? –
私たちは私たちの生産でこれをしました。 'DROP TABLE'は正規化を適用するために(テーブルは5つの別々のテーブルに分割されていました)、最初のテーブル名と同じ名前の' view'を作成します。すべての古いコードを書き換えることができないため、これは良いことでしたが、新しいコードを最適化したいと考えています。 – gotqn
私は推測[同義語](http://www.sqlservercentral。com/articles /類義語/ 115072 /)がさらに優れている可能性があります。テーブルの名前を変更してください。次に、 'CREATE SYNONYM dbo.OldTableName FOR dbo.NewTableName; 'を使用し、古いテーブル名を参照していたすべてのコードは、クエリオプティマイザが影響を受けなくても(ビューとは対照的に)動作します。しかし、私はそれらを自分で使ったことはないので、私は尋ねました。 –
ViewsとUDFには、SCHEMABINDING
オプションが存在すると考えてください。これらを使用すると、ViewまたはUDFが依存する基になるテーブル/ビューが(名前の変更などによって)変更されないようにすることができます。
ただし、デフォルトではオフになっていますオプションです。b)ストアドプロシージャでは使用できません。名前解決が遅れて完全に逆方向になります。
したがって、ビュー、UDF、およびストアドプロシージャの定義は、テーブルの名前を変更することによってすべて無効にすることができ、最初の2つはSCHEMABINDING
を使用して保護することができます。
変更された列にどのような影響があるかわからない場合は、たとえば、画像が表示されます。
場合ビュー
を選択するコード
/****** 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
を作成します。あなたはその名前で何かを参照し、それを変更します。はい、それは壊れています。そのテーブル名のすべてのインスタンスの名前は変更されません。 – Leonidas199x
カラムの名前を変更する場合は、そのテーブルにフロントエンドアプリケーションがあるかどうかを検討する必要があります。彼らはそれから壊れます。特定の列を指定してもビューが破損する可能性があります。 – plaidDK