使用大小写和 or 更新语句
本文关键字:更新 语句 or 大小写 | 更新日期: 2023-09-27 18:22:09
UPDATE Productions
SET CountryCode = (CASE WHEN @SOffice='LA' OR @SOffice='GA' then 'USA' ELSE 'CAN' END)
任何人都可以确认这是否是正确的更新案例陈述。我似乎遇到了某种错误。在我看来是正确的。
我正在处理一个应用程序,并有此更新声明:
SqlCommand cmd = new SqlCommand("UPDATE Productions SET CountryCode = (CASE WHEN @SOffice IN ('LA', 'GA') then 'USA' ELSE 'CAN' END), ProvinceCode = '" + user.GetProvinceCode() + "' WHERE ID = " + newProductionID, conn);
cmd.ExecuteNonQuery();
但是当我构建应用程序并运行此功能时,出现以下错误:
异常消息:必须声明标量变量"@SOffice"。 方法触发的异常:错误
这是什么意思??
declare @Productions table(
ind int not null identity(1,1)primary key clustered
,CountryCode nchar(3) not null
,SOFFICE NCHAR(2) NULL
)
insert into @Productions (CountryCode, SOFFICE) VALUES ('ITA','LA')
insert into @Productions (CountryCode, SOFFICE) VALUES ('ITA','VE')
insert into @Productions (CountryCode, SOFFICE) VALUES ('ITA','LZ')
insert into @Productions (CountryCode, SOFFICE) VALUES ('FRA','GA')
insert into @Productions (CountryCode, SOFFICE) VALUES ('FRA','BF')
insert into @Productions (CountryCode, SOFFICE) VALUES ('ITA','VR')
insert into @Productions (CountryCode, SOFFICE) VALUES ('GER','LA')
insert into @Productions (CountryCode, SOFFICE) VALUES ('CAN','LA')
SELECT * FROM @Productions
UPDATE P
SET COUNTRYCODE = CASE P.SOFFICE WHEN 'LA' THEN 'USA'
WHEN 'GA' THEN 'USA'
ELSE 'CAN'
END -- CASE
FROM @PRODUCTIONS P
SELECT * FROM @Productions
将上面的代码复制并粘贴到 SQL Server 2008 上,您会看到它工作正常。
希望这有帮助马塞洛
您需要
将该参数放入用于执行命令的 SqlCommand 对象中,@
符号表示 Sql 中的变量,如果@SOffice
不是变量,则需要删除@
,如果是,则需要在执行命令之前向命令添加 SqlParameter
cmd.Parameters.Add(new SqlParameter("SOffice",DbType.Char,2){Value = "LA"})
并且您还应该将其他选项作为参数包含在内,而不是通过动态构建 sql 语句,通过命令的属性添加参数要安全得多Parameters
...您还需要将命令包装在 using
语句中,conn 也应该包装在一个语句中
using(var conn = new SqlConnection(ConfigurationMananger
.ConnectionStrings["conn"].ConnectionString)
using(cmd = conn.CreateCommand())
{
cmd.CommandText =
@"UPDATE Productios
SET CountryCode = (CASE
WHEN @SOffice IN('LA','GA')
THEN 'USA' ELSE 'CAN'
END),
ProvinceCode = @ProvinceCode
WHERE ID = @newProductionID";
cmd.Parameters.AddRange(new[]{
new SqlParameter("SOffice",DbType.Char,2)
{
Value = "LA"
},
new SqlParameter("ProvinceCode",DbType.Int)
{
Value = user.GetProvinceCode()
},
new SqlParameter("newProductionID",DbType.Int)
{
Value = newProductionID
}
});
if(!conn.State == ConnectionState.Open)
conn.Open();
var resultCount = cmd.ExecuteNonQuery();
}
在您的查询中@SOffice var,未声明
使用以下链接。
http://msdn.microsoft.com/en-us/library/z72eefad%28v=vs.100%29.aspx