Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对varchar数据类型列执行计算_Sql_Database - Fatal编程技术网

Sql 对varchar数据类型列执行计算

Sql 对varchar数据类型列执行计算,sql,database,Sql,Database,我在数据库中有一个存货数量列,它的数据类型是varchar。工人从仓库取出产品时,应扣除库存数量。我在编写Sql语句时遇到了一些问题: public bool updateInventoryQty(string productID, int prodQty) { bool result = false; result = Conversion.intToBool(FoodBankDB.executeNonQuery( "UPDATE

我在数据库中有一个存货数量列,它的数据类型是varchar。工人从仓库取出产品时,应扣除库存数量。我在编写Sql语句时遇到了一些问题:

public bool updateInventoryQty(string productID, int prodQty)
    {
        bool result = false;
        result = Conversion.intToBool(FoodBankDB.executeNonQuery(
            "UPDATE dbo.products SET inventoryQuantity = inventoryQuantity - prodQty WHERE id = '" + productID + "'"
            ));

        return result;
    }
我把取出的数量作为参数。由于inventoryQuantity是varchar,因此我认为它无法执行任何计算。那么我应该把它改成:

"UPDATE dbo.products SET Convert(INT, inventoryQuantity) = inventoryQuantity - prodQty WHERE id = '" + productID + "'"

我做得对吗?提前感谢。

您应该转换作业的另一面:

"UPDATE dbo.products 
SET inventoryQuantity = CAST((CAST(inventoryQuantity AS INT) - prodQty) AS VARCHAR(20)) WHERE id = '" + productID + "'"

另外,不要连接查询,请使用参数。您现在很容易受到SQL注入的攻击。

使用参数化查询-您应该始终使用最合适的数据类型-毕竟,这就是它们的用途!根据定义,
quantity
是一个数值-因此它应该以这样的方式存储-绝对不能以
varchar
的形式存储!我的prodQty是一个变量。当我运行它时,它会显示一条错误消息“无效列名prodQty”。那么您不应该使用
@prodQty