Sql 你知道按存储过程添加列吗?

Sql 你知道按存储过程添加列吗?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我想通过存储过程将列添加到表中,列的名称应该是parameter的值。您必须编写一个动态DDL SQL语句,其中连接作为参数接收的列的名称: CREATE PROCEDURE AddColumnToTable @columnName VARCHAR(128) AS EXEC ('ALTER TABLE tableName ADD' + SPACE(1) + @columnName + SPACE(1) + 'VARCHAR(MAX) NULL') 请注意,在本例中,表的名称以及列的类型

我想通过存储过程将列添加到表中,列的名称应该是parameter的值。

您必须编写一个动态DDL SQL语句,其中连接作为参数接收的列的名称:

CREATE PROCEDURE AddColumnToTable
    @columnName VARCHAR(128)
AS
EXEC ('ALTER TABLE tableName ADD' + SPACE(1) + @columnName + SPACE(1) + 'VARCHAR(MAX) NULL')
请注意,在本例中,表的名称以及列的类型在SQL语句中是硬编码的。您可能想考虑<强>将它们作为参数< /强>添加到存储过程中,用于更一般的解决方案。

相关资源:


您必须编写一个动态DDL SQL语句,其中连接作为参数接收的列的名称:

CREATE PROCEDURE AddColumnToTable
    @columnName VARCHAR(128)
AS
EXEC ('ALTER TABLE tableName ADD' + SPACE(1) + @columnName + SPACE(1) + 'VARCHAR(MAX) NULL')
请注意,在本例中,表的名称以及列的类型在SQL语句中是硬编码的。您可能想考虑<强>将它们作为参数< /强>添加到存储过程中,用于更一般的解决方案。

相关资源:


    • 总的来说,这是一个糟糕的想法。如果您的模式需要sp对表进行更改,那么这些更改发生得太频繁,应该检查设计

      但是,如果您被这个可怕的过程所困扰(我不能充分强调这是一个多么糟糕的主意),那么您还需要为数据类型设置一个输入pvalue,如果需要,为数据类型的大小设置一个可为null的值,varchar(max)对于要添加的每一个可能的列来说都是一个糟糕的选择。仅当出于索引原因,您希望列中的字符数超过8000个时,才应使用它


      为什么这么糟糕?首先,你已经失去了对schena的控制。人们可以做任何事情,也没有任何评论来确保你不会得到12个版本的相同的东西,加上略有不同的名字。接下来,您打算如何修复应用程序以使用这些字段,而不知道添加了什么?由于您不应返回超过需要的字段,因此生产代码不应使用select*。因此,如果用户已经添加了字段,您如何知道要添加哪些字段。一般来说,用户没有足够的知识来添加字段。他们不了解数据库结构或设计,也不了解如何规范化和性能调整。让人们随意地向数据表中添加字段是短视的,这将导致数据库性能差,界面笨拙、难以使用,从而使客户感到恼火。如果您已经正确地完成了数据库和应用程序的设计工作,那么用户需要添加的内容应该很少。如果你将你的工作建立在用户能够灵活添加的基础上,那么你将面临一场灾难,一个项目不仅难以维护,而且会表现糟糕,一般来说,你的用户会讨厌它。我被迫与这些可怕的商业产品合作(如果你想举例说明灵活性如何战胜设计,并制造出一个几乎无法使用的产品,请看清楚)

      总的来说,这是一个糟糕的想法。如果您的模式需要sp对表进行更改,那么这些更改发生得太频繁,应该检查设计

      但是,如果您被这个可怕的过程所困扰(我不能充分强调这是一个多么糟糕的主意),那么您还需要为数据类型设置一个输入pvalue,如果需要,为数据类型的大小设置一个可为null的值,varchar(max)对于要添加的每一个可能的列来说都是一个糟糕的选择。仅当出于索引原因,您希望列中的字符数超过8000个时,才应使用它


      为什么这么糟糕?首先,你已经失去了对schena的控制。人们可以做任何事情,也没有任何评论来确保你不会得到12个版本的相同的东西,加上略有不同的名字。接下来,您打算如何修复应用程序以使用这些字段,而不知道添加了什么?由于您不应返回超过需要的字段,因此生产代码不应使用select*。因此,如果用户已经添加了字段,您如何知道要添加哪些字段。一般来说,用户没有足够的知识来添加字段。他们不了解数据库结构或设计,也不了解如何规范化和性能调整。让人们随意地向数据表中添加字段是短视的,这将导致数据库性能差,界面笨拙、难以使用,从而使客户感到恼火。如果您已经正确地完成了数据库和应用程序的设计工作,那么用户需要添加的内容应该很少。如果你将你的工作建立在用户能够灵活添加的基础上,那么你将面临一场灾难,一个项目不仅难以维护,而且会表现糟糕,一般来说,你的用户会讨厌它。我被迫与这些可怕的商业产品合作(如果你想举例说明灵活性如何战胜设计,并制造出一个几乎无法使用的产品,请看清楚)

      你确定要这么做吗?定期改变你的计划通常是个坏主意。如果你描述了你想要达到的目标,你可能会得到更好的答案。你确定要这样做吗?定期改变你的计划通常是个坏主意。如果你描述了你想要达到的目标,你可能会得到更好的答案。