如何使用带有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';