动态查询没有给出期望的结果

时间:2017-08-15 08:24:06

标签: sql sql-server tsql

我正在创建动态查询,如果表中存在列,则更新列。当更新查询正在运行时,它会给出错误。以下是程序

Create Procedure spr_UpdateColumnWithTotalPrice
@id int
as
begin

if not exists
(
    Select * from INFORMATION_SCHEMA.COLUMNS
    where TABLE_NAME = 'Product'
    and
    COLUMN_NAME = 'ProductSellingPrice'
)
Begin
    Declare @SellingPrice varchar(max)


    Set @SellingPrice = 'Alter table Product add ProductSellingPrice int'
    Exec(@SellingPrice)

    Print 'Table altered'
End
Else
Begin
        Set @SellingPrice = 'Update Product set ProductSellingPrice = ((UnitPrice * [GSTRATE%]/100) + UnitPrice ) where  ProductID  = @id'
        Exec(@SellingPrice)
        Print 'Table updated'
End

我得到以下结果: -

  

转换varchar值时,转换失败'更新产品集ProductSellingPrice =((UnitPrice * [GSTRATE%] / 100)+ UnitPrice)其中ProductID = @id'到数据类型int。

请提前帮助和谢谢

1 个答案:

答案 0 :(得分:2)

请改为尝试:

Set @SellingPrice = 'Update Product set ProductSellingPrice = ((UnitPrice * [GSTRATE%]/100) + UnitPrice ) where  ProductID  = '+ CAST(@id as varchar(13))

您无法使用+将int连接到字符串,因为SQL Server会尝试将字符串隐式转换为int。
这就是您需要将int显式转换为字符串的原因。