テーブルとカラムに拡張プロパティを追加しようとしましたが、SQL Serverがストアドプロシージャの追加と更新を分離しているため、これらの2つのストアドプロシージャのために、テーブルとカラムレベルでの追加または更新に必要な3つのパラメータだけで記述を作成できます。この私の現在のコード:別のストアドプロシージャからsp_addextendedpropertyを呼び出すときのエラー
CREATE PROCEDURE sp_addorupdatedesc
@tableName varchar,
@columnName varchar = NULL,
@objectDescription varchar
AS
BEGIN
IF (@columnName IS NULL)
BEGIN
IF NOT EXISTS (SELECT 1 FROM fn_listextendedproperty (NULL, 'user', 'dbo', 'table', default, NULL, NULL) WHERE [email protected])
BEGIN
EXECUTE sp_addextendedproperty 'MY_DESCRIPTION', @objectDescription, 'user', dbo, 'table', @tableName, default, NULL
END
ELSE
BEGIN
EXECUTE sp_updateextendedproperty 'MY_DESCRIPTION', @objectDescription, 'user', dbo, 'table', @tableName, default, NULL
END
END
ELSE
BEGIN
IF NOT EXISTS (SELECT 1
FROM sys.extended_properties AS ep
INNER JOIN sys.tables AS t ON ep.major_id = t.object_id
INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
WHERE class = 1 AND [email protected] AND C.name = @columnName)
BEGIN
EXECUTE sp_addextendedproperty 'MY_DESCRIPTION', @objectDescription, 'user', dbo, 'table', @tableName, 'column', @columnName
END
ELSE
BEGIN
EXECUTE sp_updateextendedproperty 'MY_DESCRIPTION', @objectDescription, 'user', dbo, 'table', @tableName, 'column', @columnName
END
END
END
GO
しかし、私は、このストアドプロシージャを使用する場合、私が代わりにこのエラーが発生します。
メッセージ15135、レベル16、状態8、プロシージャsp_addextendedpropertyを、ライン58
オブジェクトがあります無効。拡張プロパティは 'dbo.P.P'には許可されていないか、オブジェクトが存在しません。
サイドノート:ストアドプロシージャのプレフィックス 'sp_'を使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です - 接頭辞はまったくありません! –
あなたの摂取に感謝します – Angga
[悪い習慣:(長さ)なしでVARCHARを宣言](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring- varchar-without-length.aspx) - 使用する 'varchar'変数とパラメータの長さを常に**指定してください。 **パラメータ**を 'varchar'として定義した場合、長さは指定されません。**デフォルトでは**完全に1文字*長さになります**通常は**あなたが望むものではありません!だから**常に**長さを使用する!だからあなたの表と列の名前と説明はすべて**シングル文字に切り捨てられます** ** –