sql-server - 如何使用变量执行Update方法来调用表?
问题描述
我正在尝试在 SQL Server 中创建一个过程,以允许我更新表中的列。
但是,我希望表名来自变量而不是由我给出,但我收到一条错误消息。这是我到目前为止所拥有的:
我在一个包含多个字段的应用程序中有一个表单,我在 SQL 中有一个表 (FormFieldsTable),其中包含字段的名称、它所属的表......以及有关这些字段的其他信息。在该过程中,我将@inputFieldID、@inputRequestID 和@inputUpdatedField 作为输入。然后,我声明字段名和表,并根据表FormFieldsTable进行设置。之后,我声明了变量 TableID,它是每个表的 ID 列的名称,始终是表名后跟“ID”,变量 @TableName 是模式和该字段的表名之间的连接.
@inputFieldID int,
@inputRequestID int,
@inputUpdatedField nvarchar(100)=null
AS
BEGIN
DECLARE @FieldTable nvarchar(50)
DECLARE @TableIDName nvarchar(50)
DECLARE @FieldName nvarchar(100)
DECLARE @TableName nvarchar(50)
SET @FieldTable = (SELECT FieldTable FROM FormFieldsTable WHERE FormFieldsTableID=@inputFieldID)
SET @TableIDName = CONCAT(@FieldTable,'ID')
SET @FieldName = (SELECT REPLACE(FieldName,' ','') FROM FormFieldsTable WHERE FormFieldsTableID=@inputFieldID)
SET @TableName = CONCAT('Schema.',@FieldTable)
毕竟,我想对该字段的表执行更新方法,因此我执行以下操作:
UPDATE @TableName
SET @FieldName=@inputUpdatedField
WHERE @TableIDName=(SELECT @TableIDName FROM Schema.Request WHERE RequestID=@inputRequestID)
问题是我在UPDATE @TableName上收到一条错误消息,上面写着“必须声明表变量 @TableName”。我试图创建一个@tempTable,但我仍然需要更新正确的表,所以我不知道如何解决这个问题。
你能帮助我吗?
解决方案
推荐阅读
- mysql - 插入 Mysql 表时防止 Json 排序
- php - whm/cpanel/wordpress 中的 Mod_security 问题
- laravel - vue axios删除请求在laravel 7中不起作用
- python - 使用 shutil.copy 复制带有文件名的文件路径列表
- reactjs - Axios Post 调用在生产中出现 502 代理错误,其中请求是服务器正在发生并且成功响应
- javascript - v8 Javascript 引擎如何对 Int32Array 值执行位操作
- css - 动态标签不起作用。我怀疑引导 css 文件与我的 css 文件冲突
- html - 切换内容时保持相同的尺寸
- javascript - 如何将 JS 日期时间转换为本地 MySQL 日期时间?
- javascript - Vue 状态未使用默认注入值更新