C#MSSQL更改表格,然后修改值

C#MSSQL更改表格,然后修改值,c#,sql-server,tsql,ado.net,C#,Sql Server,Tsql,Ado.net,虽然以下内容在SQL Server Management Studio中可以正常工作,但在C#中却无法正常工作: 在C#中,它不断告诉我无效的列名'PeriodID'。在花了几个小时搜索之后,我想我应该在这里问一下 在搜索过程中,我遇到了一些问题,但我无法真正将我的条件查询转化为这个问题 为什么C#不能像管理工作室那样做 是否有另一种方法可以实现查询的功能,即在C#中工作?我需要在400个数据库上执行此操作,所以我真的需要一个脚本来为我执行此操作 提前谢谢 SQL server版本为2008。

虽然以下内容在SQL Server Management Studio中可以正常工作,但在C#中却无法正常工作:

在C#中,它不断告诉我
无效的列名'PeriodID'。
在花了几个小时搜索之后,我想我应该在这里问一下

在搜索过程中,我遇到了一些问题,但我无法真正将我的条件查询转化为这个问题

为什么C#不能像管理工作室那样做

是否有另一种方法可以实现查询的功能,即在C#中工作?我需要在400个数据库上执行此操作,所以我真的需要一个脚本来为我执行此操作

提前谢谢

SQL server版本为2008。 Manager版本为2008(10.0.2531)。
.NET framework版本是2.0。

我猜您的c代码中有拼写错误

错误是说PeriodID,而您的列名是PeriodID

澄清:

1-您想将此脚本推送到多个数据库上吗

2-列名“PeriodId”无效,我看不到名为“PeriodId”的列,但“PeriodId”列,这是打字错误吗


3-是否可以在没有主开始/结束块的情况下尝试相同的块?

服务器排序规则是否不区分大小写?因为您正在添加PeriodId,然后更新PeriodId,如果表中还没有PeriodId列,那么我会在ManagementStudio中运行它“invalid column name'PeriodId'”

复制:

create table Periods (
    PeriodID bigint not null
)
go
insert into Periods(PeriodID) select 1
go
create table MobilePLans (
    BLah int not null
)
go
insert into MobilePLans(BLah) select 2
go
DECLARE @PeriodID AS bigint;
SELECT TOP 1 @PeriodID = PeriodID FROM Periods ORDER BY PeriodID DESC;
IF NOT EXISTS(SELECT * FROM information_schema.columns WHERE COLUMN_NAME = N'PeriodID' AND TABLE_NAME = N'MobilePlans')
BEGIN
    BEGIN
    ALTER TABLE MobilePlans ADD PeriodId bigint NULL
    END
    BEGIN
    UPDATE MobilePlans SET PeriodID = @PeriodID
    END
    BEGIN
    ALTER TABLE MobilePlans ALTER COLUMN PeriodID bigint NOT NULL
    END
END
原因很简单-SQL Server尝试完全编译每个批如果列已存在,则可以编译UPDATE语句。如果没有,您将得到错误

如果将更新放在Exec中:

EXEC('UPDATE MobilePlans SET PeriodID = ' + @PeriodID)

然后,它将在该列确实存在时编译。

是的,对不起。我把它翻译得更有意义。我只是忘了翻译错误信息。1:是的,大约400,但在同一个例子中。2:忘了翻译错误信息。正如你所指出的,应该是周期性的天哪。。那件小事解决了我的问题。编译器无法理解这一点是多么烦人啊。我想我太习惯于让C#编译器把东西放在盘子里了:)谢谢你,达米恩!不,不是。我忘了提到我试图得出一致的结论,但没有任何积极的效果。我的意思是,确实如此。它不区分大小写。:)
EXEC('UPDATE MobilePlans SET PeriodID = ' + @PeriodID)