我正在创建动态查询,如果表中存在列,则更新列。当更新查询正在运行时,它会给出错误。以下是程序
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。
请提前帮助和谢谢
答案 0 :(得分:2)
请改为尝试:
Set @SellingPrice = 'Update Product set ProductSellingPrice = ((UnitPrice * [GSTRATE%]/100) + UnitPrice ) where ProductID = '+ CAST(@id as varchar(13))
您无法使用+
将int连接到字符串,因为SQL Server会尝试将字符串隐式转换为int。
这就是您需要将int显式转换为字符串的原因。