如何创建存储过程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';

一些事情。该过程被声明为一个函数,即参数在括号中。此外,变量@sql的赋值似乎没有正确地将字符串连接在一起。此外,当执行过程时,动态SQL包含已经连接到字符串中的输入参数,因此无需进一步参数化。可能是类似的东西

CREATE PROC updateTable
@PassedTableName  NVarchar(255),
@new              NVarchar(255),
@frm_name         NVarchar(255),
@old_val          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 = N'UPDATE ' + @ActualTableName + 
N' SET new_units = @new' + 
N' WHERE frm_name = @frm_name and 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

我想你想要的是and,而不是=:

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

最新更新