我想通過存儲過程將列添加到表中,列的名稱應該是參數。的值。有沒有想通過存儲過程添加列?
0
A
回答
2
你必須在那裏您連接的列名作爲參數收到撰寫動態DDL SQL語句:
CREATE PROCEDURE AddColumnToTable
@columnName VARCHAR(128)
AS
EXEC ('ALTER TABLE tableName ADD' + SPACE(1) + @columnName + SPACE(1) + 'VARCHAR(MAX) NULL')
注意,在這個例子中,表的名稱以及該列的類型在SQL語句中被硬編碼爲。您可能需要考慮將作爲參數添加到存儲過程以獲得更通用的解決方案。
相關資源:
1
這是一般一個可怕的想法。如果您的模式需要更改需要由sp完成的表,那麼它們發生得太頻繁,應該審查設計。
但是如果你被這個可怕的過程所困住(我不能強調它真的是一個壞主意)。那麼你也需要爲數據的數據類型輸入一個pvalue,如果需要,數據類型的大小可以爲空,varchar(max)對於添加每個可能的列都是不好的選擇。只有當您希望列中的索引超過8000個字符時才應使用它。
爲什麼這樣不好?首先,你已經失去了對schena的控制。人們可以做任何事情,沒有任何審查,以確保你沒有得到十二個版本的相同的東西,添加了不同的名字。接下來你如何修改應用程序以使用這些字段而不知道添加了什麼?既然你不應該返回比你需要的更多的字段,你的生產代碼不應該使用select *。因此,如果您的用戶添加了這些字段,您怎麼知道要添加哪些字段。一般用戶不夠豐富,無法添加字段。他們不瞭解數據庫結構或設計,也不瞭解如何規範化和調整性能。讓人們無處不在地爲數據表添加字段是短視的,並且會導致數據庫性能不佳以及尷尬,難以使用的接口,這些接口會讓客戶煩惱。如果你在設計數據庫和應用程序時已經做好了你的工作,那麼用戶需要添加的東西應該很少。如果你的工作基礎是用戶能夠靈活地添加,那麼你就會遇到一個項目的災難,這個項目不僅難以維護,而且性能也不好,一般你的用戶會討厭它。我被迫與這些可怕的商業產品一起工作(看看Clarity,如果你想要一個例子,說明flexibilty如何超越設計並製造出幾乎不可用的產品)。
相關問題
- 1. 存儲過程返回沒有列
- 2. 有沒有辦法通過C#對象SQL存儲過程
- 3. 添加存儲過程時EA沒有數據庫類型
- 4. 在存儲過程中添加一列
- 5. tsql沒有觸發(通過ssis存儲過程) - SQL Server 2012
- 6. C#存儲過程沒有通過可選參數在SQL Server
- 7. 添加列到存儲過程有條件
- 8. 通過數目陣列存儲過程
- 9. MySQL存儲過程沒有值檢索
- 10. MySQL存儲過程沒有被創建
- 11. msdb.dbo.sp_send_dbmail沒有一個存儲過程
- 12. 插入存儲過程沒有編譯
- 13. 存儲過程沒有發現
- 14. 存儲過程沒有任何返回
- 15. EF6存儲過程沒有結果
- 16. 沒有編譯'Set'的存儲過程
- 17. 存儲過程沒有得到執行
- 18. 列出所有沒有參數的存儲過程
- 19. 存儲過程沒有返回任何列,只有整數
- 20. 通過存儲過程
- 21. 通過存儲過程
- 22. 有沒有辦法通過編程將Alias添加到Powershell Cmdlet?
- 23. 使具有陣列Oracle存儲過程
- 24. 未通過存儲過程準確添加數據(Oracle 11g R2)
- 25. 無法通過EDMX添加表格/視圖/存儲過程
- 26. 通過存儲過程將數據添加到SQL表中?
- 27. 存儲過程有錯誤
- 28. NHibernate只有存儲過程
- 29. 私有MySql存儲過程
- 30. gitweb沒有通過符號鏈接加載存儲庫
您確定要這麼做嗎?定期改變你的計劃通常是一個壞主意。如果你描述你想達到的目標,你可能會得到更好的答案。 – 2010-06-14 07:53:39