我想通过存储过程将列添加到表中,列的名称应该是参数。的值。
答案 0 :(得分: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 :(得分:1)
但是,如果你陷入这个可怕的过程(我不能强调它真正的坏主意。)那么你还需要为数据的数据类型输入一个pvalue,并且可以为空如果需要,可以使用一个数据类型的大小,varchar(max)是每个可能添加的列的不良选择。仅当您希望列中包含超过8000个字符的索引时才应使用它。
为什么这么糟糕?首先,你已经失去了对schena的控制权。人们可以做任何事情而且没有任何评论可以确保你不会得到十二个版本的相同的东西,添加了略有不同的名字。接下来,您打算如何在不知道添加内容的情况下修复应用程序以使用这些字段?由于您永远不会返回超出您需要的字段,因此您的生产代码不应使用select *。因此,如果您的用户添加了哪些字段,您如何知道要添加哪些字段。一般用户不足以知道添加字段。他们不了解数据库结构或设计,也不了解如何规范化和性能调优。让人们毫不犹豫地将数据表添加到数据表中是短视的,并且会导致性能不佳的数据库以及惹恼客户的难以使用的界面。如果您已经在设计数据库和应用程序方面做得很好,那么用户应该添加的内容非常少。如果您的工作基于能够添加灵活性的用户,那么您的项目灾难不仅难以维护,而且性能也会很差,一般而言您的用户会讨厌它。我被迫与这些可怕的商业产品一起工作(如果你想要一个灵活性如何胜过设计并制造出几乎无法使用的产品的例子,请看Clarity)。