在 SQL Server 2014 中,当表名和字段名是变量时,需使用动态 SQL。以下是实现步骤和示例代码:

步骤说明
使用 QUOTENAME 处理对象名:防止 SQL 注入和特殊字符问题。

构建动态 SQL 字符串:拼接表名、字段名及参数占位符。

参数化传递值:通过 sp_executesql 传递值变量,确保类型安全。

验证对象存在性(可选):检查表和字段是否存在,避免运行时错误。

示例代码
DECLARE @TableName NVARCHAR(128) = 'YourTable'; -- 表名变量
DECLARE @FieldA NVARCHAR(128) = 'Column1'; -- 字段A变量
DECLARE @FieldB NVARCHAR(128) = 'Column2'; -- 字段B变量
DECLARE @FieldC NVARCHAR(128) = 'Column3'; -- 字段C变量
DECLARE @ValueA SQL_VARIANT = 'Value1'; -- 值变量(根据实际类型调整)
DECLARE @ValueB SQL_VARIANT = 100; -- 示例数值
DECLARE @ValueC SQL_VARIANT = GETDATE(); -- 示例日期

-- 动态 SQL 语句
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N'UPDATE ' + QUOTENAME(@TableName) +
N' SET ' + QUOTENAME(@FieldA) + N' = @pValueA,' +
QUOTENAME(@FieldB) + N' = @pValueB,' +
QUOTENAME(@FieldC) + N' = @pValueC;';

-- 执行动态 SQL
EXEC sp_executesql @SQL,
N'@pValueA SQL_VARIANT, @pValueB SQL_VARIANT, @pValueC SQL_VARIANT',
@pValueA = @ValueA,
@pValueB = @ValueB,
@pValueC = @ValueC;

添加 WHERE 条件
若需动态 WHERE 条件:
DECLARE @WhereField NVARCHAR(128) = 'ID'; -- 条件字段
DECLARE @WhereValue SQL_VARIANT = 1; -- 条件值

SET @SQL = N'UPDATE ' + QUOTENAME(@TableName) +
N' SET ' + QUOTENAME(@FieldA) + N' = @pValueA,' +
QUOTENAME(@FieldB) + N' = @pValueB,' +
QUOTENAME(@FieldC) + N' = @pValueC' +
N' WHERE ' + QUOTENAME(@WhereField) + N' = @pWhereValue;';

EXEC sp_executesql @SQL,
N'@pValueA SQL_VARIANT, @pValueB SQL_VARIANT, @pValueC SQL_VARIANT, @pWhereValue SQL_VARIANT',
@pValueA = @ValueA,
@pValueB = @ValueB,
@pValueC = @ValueC,
@pWhereValue = @WhereValue;

IF EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = @TableName
) AND EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName AND COLUMN_NAME IN (@FieldA, @FieldB, @FieldC)
)
BEGIN
-- 执行动态 SQL
END
最小权限原则:确保执行用户仅拥有必要权限。

避免用户直接输入对象名:尽量通过预定义选项传入变量,减少注入风险。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。