sql - 如何创建存储过程 sql server 以使用 where 条件更新列属性?如何在where条件下解决`=`
问题描述
如何在=
where 条件下使用符号。
实际查询要执行为 -
UPDATE {table_name} SET new_units = {new} WHERE [{frm_name}] = '{old_val}'
new_units, frm_name 是列。而 new 和 old_val 都是字符串值
试图创建像这样的相同程序(类似的概念)-
CREATE PROC updateTable( @PassedTableName as NVarchar(255) , @new as NVarchar(255), @frm_name as NVarchar(255), @old_val as NVarchar(255) )
AS
BEGIN
DECLARE @ActualTableName AS NVarchar(255)
SELECT @ActualTableName = QUOTENAME( TABLE_NAME )
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = @PassedTableName
DECLARE @sql AS NVARCHAR(MAX)
SELECT @sql = '
UPDATE ' + @ActualTableName + '
SET new_units = @new WHERE frm_name=@frm_name' + '=' + 'old_val=@old_val';
EXEC sp_executesql @sql,
N'@new NVarchar(255), @frm_name NVarchar(255), @old_val NVarchar(255)',
@new =@new, @frm_name=@frm_name, @old_val=@old_val;
END
尝试执行该过程 -
EXEC updateTable @PassedTableName='PlanData', @new='test', @frm_name='type', @old_val= 'versions'
通过以下结果获得正确的结果 -
UPDATE PlanData SET new_units = 'test' WHERE type= 'versions';
解决方案
我想你想要and
,而不是=
:
UPDATE ' + @ActualTableName + '
SET new_units = @new
WHERE frm_name=@frm_name and old_val=@old_val';
推荐阅读
- ruby-on-rails - YearsController:Class 的未定义方法“before_save”你是说什么?before_action
- c# - WPF 中 Telerik RadNumericUpDown 的默认值
- r - 在ggplot中过滤管道df
- google-apps-script - 从电子表格生成 Google Drive 通知
- jquery - 使用类似于俄罗斯方块的下降单元格在加载时为表格设置动画
- puppeteer - puppppeteer js 元素即使在控制台中也没有点击
- c# - Selenium Webdriver 与 C# 有没有办法滚动鼠标滚轮?
- google-apps-script - 谷歌表格(谷歌财经) - 一次获取股票价格并跟踪
- time-series - 使用 AICc 使用 TSLM 选择滞后预测变量
- polymer - 在 Polymer 3 元素或 lit-elements 中加载普通 JavaScript