存储过程错误附近的语法不正确
Posted
技术标签:
【中文标题】存储过程错误附近的语法不正确【英文标题】:Incorrect syntax near stored procedure error 【发布时间】:2010-09-21 15:47:29 【问题描述】:我正在更新一长串记录。在我的代码中,一切都按预期运行,直到它执行查询。我得到一个
“TempUpdatePhysicalCityStateZip”附近的语法不正确
(我的存储过程名称)。我已经使用 SQL Server Management Studio 对其进行了测试,并且运行良好。所以,我不太确定我哪里弄错了。下面是我的存储过程和代码:
ALTER PROCEDURE [dbo].[TempUpdateCityStateZip]
@StoreNo nvarchar (11),
@City nvarchar(50),
@State nvarchar(2),
@Zip nvarchar(5)
AS
BEGIN
SET NOCOUNT ON;
UPDATE StoreContact
SET City = @City, State = @State, Zip = @Zip
WHERE StoreNo = @StoreNo
END
这是我的代码:
Dictionary<string, string> CityStateZipList = getCityStateZipList(dbPath);
using (SqlConnection conn = new SqlConnection(dbPath))
conn.Open();
SqlCommand cmdUpdate = new SqlCommand("TempUpdateCityStateZip", conn);
foreach (KeyValuePair<string, string> frKeyValue in CityStateZipList)
cmdUpdate.Parameters.Clear();
string[] strCityStateZip = frKeyValue.Value.Split(' ');
cmdUpdate.Parameters.AddWithValue("StoreNo", frKeyValue.Key.ToString());
foreach (String i in strCityStateZip)
double zipCode;
if (i.Length == 2)
cmdUpdate.Parameters.AddWithValue("State", i);
else if (i.Length == 5 && double.TryParse(i, out zipCode))
cmdUpdate.Parameters.AddWithValue("Zip", i);
else
cmdUpdate.Parameters.AddWithValue("City", i);
cmdUpdate.ExecuteNonQuery();
【问题讨论】:
【参考方案1】:如果你不指定命令类型,我相信你会得到那个令人费解的错误消息:
cmdUpdate.CommandType = CommandType.StoredProcedure;
【讨论】:
【参考方案2】:参数前不需要@符号吗?
cmdUpdate.Parameters.AddWithValue("@State", i);
FWIW,那是一段肮脏的代码,你可能会在试图维护它时遇到很多问题。出于性能原因,您可能希望在打开连接之前解析出 CityStateZipList,这样您就不会保持它打开的时间超过您的需要。
【讨论】:
我认为你是对的,那些参数名称需要更正。但是,我认为难以理解的“语法错误”错误消息是由缺少 CommandType 引起的。以上是关于存储过程错误附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章
添加新的 Join 语句后 MS-SQL 存储过程引发错误。消息 102,级别 15,状态 1,第 279 行“WHERE”附近的语法不正确
错误:消息102,级别15,状态1,过程InsertCustomers,第30行'THROW'附近的语法不正确
存储过程出现错误.关键字'ORDER'附近有语法错误.')'附近有语法错误.