【发布时间】:2017-01-11 19:55:23
【问题描述】:
我正在存储过程中编写动态插入查询。我正在接收列名作为我的存储过程的参数。
例如,我有一个 Employee 表,其中包含 EmployeeId 和 EmployeeName 列。我需要在每个员工姓名之前附加EMP_,同时将数据从Employee 表插入到Department 表中。
非动态查询如下所示。
INSERT INTO Department(EmployeeId, EmployeeName)
SELECT
EmployeeId, 'EMP_' + EmployeeName
FROM
Employee
如果我写一个动态插入
SET @SqlCommand =
'INSERT INTO ' + @DepartmentTable + '(' + @EmployeeIdColumn + ',' + @EmployeeNameColumn + ')' +
'SELECT ' + @EmployeeIdColumn + ',''EMP_''' + @EmployeeNameColumn + '''' +
'FROM ' +
@EmployeeTable + ' WTB '
EXEC sp_executesql
@stmt = @SqlCommand
问题在于,对于 EmployeeName 列,它插入的是“EMP_EmployeeName”而不是实际的员工姓名。我尝试在EmployeeNameColumn 前后加上引号,但没有成功。我该如何解决?
【问题讨论】:
-
在每个员工姓名前附加“EMP”。 @EmployeeNameColumn 是存储过程接收的列名。
-
虽然这不是并且预先回答,但我强烈建议您阅读这篇博文。每当我在做动态 sql 时,我都会参考它。它详细介绍了许多实现动态 sql 的“最佳实践”方法,既安全(参数化)又高效sommarskog.se/dynamic_sql.html#good_practices
-
@turbo88 嘿!您是否尝试过提供的任何解决方案?
标签: sql sql-server tsql dynamic-sql