0
我嘗試擴展屬性添加到我的表和列sp_addextendedproperty,但由於SQL服務器分開添加和更新存儲過程,並且需要太多的未使用的參數爲我的情況下,我決定創建包裝對於這2個存儲過程,所以我可以創建只有3個參數的表和列級別的添加或更新所需的描述。這是我當前的代碼:錯誤調用時從另一個存儲過程
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_'並將其他內容用作前綴 - 或者根本沒有前綴! –
感謝您sugestion – Angga
[不良習慣踢:宣佈不VARCHAR(長度)](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring- varchar-without-length.aspx) - 你應該總是**爲你使用的任何'varchar'變量和參數提供一個長度。當你將一個**參數**定義爲'varchar'時 - 沒有任何長度 - 它默認爲**正確1字符**長度 - 通常**不**你想要什麼!所以**總是**使用長度!所以你的表和列的名稱以及描述都被**截斷**爲一個**單個字符!** –