如何使用SQL选择查询通过动态字段名称更新值



我正在传递动态列名库,该列名称更新值,下面是我的表

Table_CandidateInfo
Id     Name        Age    City 
1      Mazhar      30     Gulbarga
20     Khan        29     Bidar

示例1

Declare @ColumnName varchar(100), @Id int
set @ColumnName='City' 
set @Id=20
set @value='Hyderabad'
update set ____ Table_CandidateInfo where ID=@Id 

我的输出应该像下面的table_candidaterInfo,海得拉巴城市更新了ID和列名称的基础

Table_CandidateInfo
Id     Name        Age    City 
1      Mazhar      30     Gulbarga
20     Khan        29     Hyderabad

列名是动态的某个时间 @columnname ='name',所以名称值应更新

昨天我要求获得列值的数据基础,但是现在我需要更新

如何使用SQL选择查询

获得动态字段名称的值

好吧,由于您无法在SQL中参数化标识符,因此您唯一的选择是将动态SQL用于此类。
但是,请注意,创建和执行动态SQL语句的代码需要以这样的方式编写,以防止SQL注入攻击。
该规则很简单 - 您无法参数化的内容必须被白色上市。

基本上,您可以做这样的事情:

CREATE PROCEDURE UpdateCandidateInfo
(
     @ColumnName sysname, 
     @Id int,
     @value sql_Variant
)
AS
IF EXISTS
(
    SELECT 1
    FROM information_schema.columns
    WHERE Table_Name = 'Table_CandidateInfo'
    AND Column_Name = @ColumnName
)
BEGIN
    DECLARE @Sql nvarchar(4000) = N'Update Table_CandidateInfo SET '+ QUOTENAME(@ColumnName) + N' = @Value WHERE Id = @Id';
    DECLARE @Params nvarchar(4000) = N'@Value sql_Variant, @Id int'
    EXEC sp_ExecuteSql @Sql, @Params, @Value, @Id
END
GO

请注意,该代码是直接在此处编写的,因此未经测试 - 其中可能存在错误,但这是一般的想法。

sysname是一种系统数据类型,SQL Server用于所有标识符。基本上是nvarchar(128)的别名,除了无法删除。

sql_variant是一种特殊的数据类型,可用于将不同的数据类型保存在其中。

使用QUOTENAME启用包含空格,点或保留关键字的列名。

相关内容

  • 没有找到相关文章

最新更新