簡體   English   中英

如何在 SQL 服務器中動態提供列名並更新記錄?

[英]How to dynamically provide column name and update the record in SQL Server?

我有一張這樣的桌子

在此處輸入圖像描述

我想將列名存儲在變量@myColumn中,然后使用Update命令。 如何才能做到這一點? 可能嗎?

    DECLARE @myColumn varchar(20)
    SET @myColumn = 'State'
    UPDATE Country SET @myColumn = 'Florida' WHERE Id = 1

是的,有一些動態 SQL 是可能的。 如果你在這個過程中有完全的控制權,你可以試試這個解決方案:

讓我們創建一個臨時表來顯示:

create table #temp ([id] int, [state] varchar(10));

Insert into #temp
SELECT 1 as ID, null as [state]

select * from #temp

現在已經創建好了,讓我們試試

DECLARE @myColumn varchar(20), @sql varchar(400)
SET @myColumn = '[state]'

set @sql = CONCAT('Update #temp SET ',@myColumn ,'= ''FLORIDA'' where ID = 1')

exec(@sql)

檢查結果

select * from #temp

如果您無法完全控制該過程,則需要從 SQL 注入中保存您的代碼。

要動態使用列的名稱,您需要 Dynamic SQL。

這是一個例子:

 DECLARE @DynSql nvarchar(max), @DynParams nvarchar(max), @UpdateSql nvarchar(max), @UpdateParams nvarchar(max); DECLARE @myColumn varchar(20), @myColumnValue varchar(20), @myId INT; SET @UpdateSql = 'UPDATE Country '+CHAR(10) + 'SET [COLUMN] = @Value' + CHAR(10) + 'WHERE Id = @Id'; SET @UpdateParams = N'@Value varchar(20), @Id int'; SET @myColumn = 'State'; SET @myColumnValue = 'Florida'; SET @myId = 1; SET @DynSql = REPLACE(@UpdateSql, '[COLUMN]', QUOTENAME(@myColumn)); SET @DynParams = @UpdateParams; -- select @DynSql As DynSql; EXECUTE sp_executesql @DynSql, @DynParams, @Value = @myColumnValue, @Id = @myId;
  1 行受影響
SELECT * FROM Country WHERE ID = 1;
ID 國家的名字 State
1 美國 佛羅里達

關於db<>fiddle 的演示在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM