SQL Server错误:列名无效

时间:2010-11-19 06:59:44

标签: sql-server tsql sql

单击某个链接“生成默认值”时,将执行以下SP。 我想要的是当点击链接“Make Default”时 只有对应于特定“UserAddressID”的“IsDefault”记录  设置为1,所有其余记录在teable列中设置为0

给我以下错误: -

  

无效的列名'UserAddressID'

当列存在时!我的SP怎么了?

3 个答案:

答案 0 :(得分:2)

问题在于:

if(UserAddressID!=@UserAddressID)

UserAddressID不在SQL语句范围之外。

实际上你根本不需要if语句。您要检查的条件已包含在SQL中。

您还可以将两个查询合并为一个更新:

UPDATE SC.UserAddressDetails
SET IsDefault = (CASE WHEN UserAddressID=@UserAddressID THEN 1 ELSE 0 END)

答案 1 :(得分:1)

您可以使用 -

将IsDefault值更新为1
UPDATE SC.UserAddressDetails SET IsDefault=1 WHERE UserAddressID=@UserAddressID

在表结构中,您可以将ISDefault的默认值设置为0.在这种情况下,您无需再次使用

更新所有记录
ALTER TABLE SC.UserAddressDetails ADD CONSTRAINT default_isdefault DEFAULT 0 FOR IsDefault 

答案 2 :(得分:0)

这听起来像一个架构问题,这就是为什么你的存储过程变得混乱。在Users表中创建一个名为DefaultUserAddressID的列。那时只能有一个。在Addresses表上创建一个IsDefault列并不是一个很好的设计,因为它使用更多的数据来实现相同的功能,容易出错并要求你在更新地址信息的所有存储过程中进行各种其他检查。

简单就是更好。