不能使用LINQ TO SQL和存储过程修改表



当我在表Metric中添加一个新度量时,我必须更改表Statistic,我在表Statistic中添加一列。

我使用了一个存储过程,它允许我修改表Statistic,使代码:

CREATE PROCEDURE dbo.addnewmetricInstat
(
    @MetricName varchar(254),
    @TypeMetric varchar(254)
)
AS
  IF (@TypeMetric='int')
  Begin
      alter table Statistic
      add @MetricName int null
  end
  ELSE if (@TypeMetric='string')
  begin
     alter table Statistic
     add @MetricName varchar(254) null
  end

然后我成功地调用了存储过程,但是没有添加列。我在c#中调用这个存储过程的代码是:

using (DataClassesDataContext db = new DataClassesDataContext("Data Source=EMEA-TUN-WS0367\SQLEXPRESS;Initial Catalog=Perfgas;Integrated Security=True"))
{
    db.addnewmetricInstat(metric.MetricName, metric.Type);
    db.SubmitChanges();
}

首先,在您在SSMS中测试sp之前,不应该尝试从应用程序调用sp。这样您就知道问题是出在调用还是sp上。这样做将节省大量调试时间。

你的程序有问题。为此,您将需要使用动态SQl。现在您正在尝试添加一个名为MetericName的列,因为您没有使用该变量。这将工作一次,但当然,第二次运行它时,您将得到一个错误,因为该列已经存在。但是,您不能仅仅将变量扔到alter table语句中,您必须使用动态SQL。

最新更新