【问题标题】:How can i create(add) a new row in an existing table AND insert a row in another table?如何在现有表中创建(添加)新行并在另一个表中插入一行?
【发布时间】:2013-07-30 00:51:55
【问题描述】:
CREATE PROCEDURE  _InsertAttbts
    @Attribute VARCHAR(100)

AS 

    IF  NOT EXISTS (SELECT * FROM dbo.Attributes WHERE Attribute = @Attribute)

    INSERT INTO dbo.Attributes(Attribute)
                VALUES(@Attribute)

    IF  NOT EXISTS (SELECT * FROM DBO.Products WHERE Pname =@Attribute)

        ALTER TABLE PRODUCTS
        ADD @Attribute varchar(100)

这里Products 是我的主表,Attributes 是它的子表。我的任务是,如果用户尝试插入新行,它会检查该行是否存在,如果不存在,它想在产品表中添加新行,同时它应该在属性表的属性字段中插入相同的值...

我在 SQL Server 2012 中使用 SP。

请帮忙!

谢谢....

【问题讨论】:

  • 你能提供一些示例数据来解释你想要做什么吗?
  • 我不明白;为什么要在产品表中添加一列?
  • 我试图在 products 表中添加一个新字段,因为用户给出了该属性的名称,并且相同的属性也应该保存(通过插入)在 Attributes 表中......
  • 您要在每次用户要求时向表中添加一个新列?你将如何管理这个?你真的需要重新考虑这个设计。

标签: sql-server stored-procedures insert alter-table insert-into


【解决方案1】:

我认为您需要使用动态 SQL 来执行此操作。

CREATE PROCEDURE _InsertAttbts @Attribute VARCHAR(100)
AS
BEGIN
    IF NOT EXISTS (SELECT * FROM dbo.Attributes WHERE Attribute = @Attribute)
    BEGIN
        INSERT INTO dbo.Attributes(Attribute)
            VALUES(@Attribute);

        declare @sql nvarchar(max) = 'ALTER TABLE PRODUCTS ADD '+@Attribute+' varchar(100)';
        exec sp_executesql @sql;
    END;
END;

我不知道你为什么要这样做。您可以使用INFORMATION_SCHEMA.COLUMNS 或系统表之一获取列列表。

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 2013-12-26
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2013-12-31
    • 1970-01-01
    • 2019-05-24
    相关资源
    最近更新 更多