SQL存储过程 参数为字段名和值的函数怎么写?

Banianer 2012-12-04 10:28:45
在存储过程中遇到一下的雷同语句,想写成函数调用
其中 @BasicUnit_1 为字段的值,BasicUnit_1为对应的字段名称
也就是说函数一个参数是字段名,一个参数是该字段的值

if (@BasicUnit_1 != 0) and (@BasicUnit_1 != null)
begin
update ProductPrice set BasicUnit_1 = cast(FactoryPrice * @BasicUnit_1 as decimal(18,2)) where ProductID in
(select ProductID from V_Products where @strWhere)
end

if (@BasicUnit_2 != 0) and (@BasicUnit_2 != null)
begin
update ProductPrice set BasicUnit_2 = cast(FactoryPrice * @BasicUnit_2 as decimal(18,2)) where ProductID in
(select ProductID from V_Products where @strWhere)
end
...全文
324 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
if (@BasicUnit_1 != 0) and (@BasicUnit_1 != null)
	begin
	exec('update ProductPrice set BasicUnit_1 = cast(FactoryPrice *'+ ltrim(@BasicUnit_1)+' as decimal(18,2)) where ProductID in 
	(select ProductID from V_Products where '+@strWhere+'='+LTRIM(@BasicUnit_1)+')'
	end

	if (@BasicUnit_2 != 0) and (@BasicUnit_2 != null)
	begin
	exec('update ProductPrice set BasicUnit_1 = cast(FactoryPrice *'+ ltrim(@BasicUnit_2)+' as decimal(18,2)) where ProductID in 
	(select ProductID from V_Products where '+@strWhere+'='+LTRIM(@BasicUnit_2)+')'
	end

这种情况要动态的哦
以学习为目的 2012-12-05
  • 打赏
  • 举报
回复
引用 3 楼 chuifengde 的回复:
既然都是更新,那就不必用函数,用存储过程一样能解决,比如: SQL code ? 123456789101112131415 CREATE PROC Test @ParaName VARCHAR(20), @ParaValue VARCHAR(20), @strWhere VARCHAR(100) AS BEGIN DECLARE @S……
鸟哥正解!字段值和字段名用动态拼接的方式
--小F-- 2012-12-05
  • 打赏
  • 举报
回复
引用 3 楼 chuifengde 的回复:
既然都是更新,那就不必用函数,用存储过程一样能解决,比如: SQL code?123456789101112131415CREATE PROC Test @ParaName VARCHAR(20), @ParaValue VARCHAR(20), @strWhere VARCHAR(100)AS BEGIN DECLARE @Sql VARCH……
鸟说得不错 表名或者字段名为变量的时候 请看看动态SQL基本语法。
chuifengde 2012-12-05
  • 打赏
  • 举报
回复
既然都是更新,那就不必用函数,用存储过程一样能解决,比如:
CREATE PROC Test
	@ParaName VARCHAR(20),
	@ParaValue VARCHAR(20),
	@strWhere VARCHAR(100)
AS 
BEGIN
	DECLARE @Sql  VARCHAR(1000)
	
	IF ISNULL(@ParaValue,'0') !='0'
	BEGIN
		SET @Sql='UPDATE ProductPrice SET '+@ParaName+' = CAST(FactoryPrice * '+@ParaValue+' AS DECIMAL(18,2)) '+
    		         'WHERE ProductID IN(SELECT ProductID FROM V_Products WHERE '+@strWhere+')'
    		EXEC(@Sql)
	END
END
三断笛 2012-12-04
  • 打赏
  • 举报
回复
 @strWhere这类,不能用函数,只能用动态SQL方式执行. 百度exec executesql
三断笛 2012-12-04
  • 打赏
  • 举报
回复
NULL能用等号比较吗?你的结果正常吗?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧