当我在表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。