gpt4 book ai didi

C# MSSQL alter table 然后修改值

转载 作者:行者123 更新时间:2023-11-30 13:51:40 27 4
gpt4 key购买 nike

虽然以下代码在 SQL Server Management Studio 中运行良好,但在 C# 中无法运行:

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

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

在搜索时,我遇到了 http://bytes.com/topic/c-sharp/answers/258520-problem-sqlcommand-t-sql-transaction ,但我无法真正将我的条件查询翻译成那个。

为什么 C# 不能像 Management studio 那样做?

是否有另一种方法可以执行查询的操作,在 C# 中有效?我需要在 400 个数据库上执行此操作,所以我非常想要一个脚本来为我执行此操作。

提前致谢!

SQL 服务器版本为 2008。管理器版本是 2008 (10.0.2531)。.NET 框架版本为 2.0。

最佳答案

在 Management Studio 中运行它时,我得到“无效的列名称‘PeriodID’”,如果该表还没有 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)

然后它将在该列确实存在的位置进行编译。

关于C# MSSQL alter table 然后修改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com