首页 > 解决方案 > 如何创建存储过程 sql server 以使用 where 条件更新列属性?如何在where条件下解决`=`

问题描述

如何在=where 条件下使用符号。

实际查询要执行为 -

UPDATE {table_name} SET new_units = {new} WHERE [{frm_name}] = '{old_val}'

new_units, frm_name 是列。而 new 和 old_val 都是字符串值

试图创建像这样的相同程序(类似的概念)-

如何在mssql服务器中传递参数,中间有斜线

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';

标签: sqlsql-serversql-server-2008

解决方案


我想你想要and,而不是=

UPDATE ' + @ActualTableName + '
    SET new_units = @new
    WHERE frm_name=@frm_name and old_val=@old_val';

推荐阅读