[研究]TSQL, 把 table1 中欄位名稱包含 Memo 的,欄位值都設定為 N''
2024-01-19
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19
********************************************************************************
TSQL, 把 table1 中欄位名稱包含 Memo 的,欄位值都設定為 N''
ChatGPT
在T-SQL中,你可以使用以下的UPDATE語句來將表(table)中包含特定字串的欄位值設定為N''(空字串)。這裡我們使用INFORMATION_SCHEMA.COLUMNS系統視圖來獲取表的列資訊,然後應用條件篩選。
假設你的表名稱是table1,以下是一個範例:
DECLARE @ColumnName NVARCHAR(MAX) DECLARE @TableName NVARCHAR(MAX) DECLARE @UpdateQuery NVARCHAR(MAX) -- 設定表名稱 SET @TableName = 'table1' -- 創建要更新的查詢 SET @UpdateQuery = '' -- 獲取包含 Memo 的欄位名稱 SELECT @ColumnName = COALESCE(@ColumnName + ', ', '') + COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName AND COLUMN_NAME LIKE '%Memo%' -- 如果找到符合條件的欄位,則創建更新查詢 IF @ColumnName IS NOT NULL BEGIN SET @UpdateQuery = 'UPDATE ' + @TableName + ' SET ' -- 將每個欄位設定為 N'',注意這裡使用 QUOTENAME 避免SQL注入攻擊 SET @UpdateQuery = @UpdateQuery + STUFF((SELECT ', ' + QUOTENAME(COLUMN_NAME) + ' = N''''' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName AND COLUMN_NAME LIKE '%Memo%' FOR XML PATH('')), 1, 2, '') + ';' END -- 如果有要更新的查詢,執行更新 IF @UpdateQuery <> '' BEGIN EXEC sp_executesql @UpdateQuery PRINT '更新成功' END ELSE PRINT '找不到符合條件的欄位' |
這個腳本會動態生成一個UPDATE語句,該語句將包含Memo的所有欄位的值都設定為N''。請注意,使用動態SQL語句有潛在的安全風險,請確保你的應用程序對表名稱進行了適當的輸入驗證,以防止SQL注入攻擊。
********************************************************************************
如果要顯示執行的 T-SQL
-- 如果有要更新的查詢,執行更新 IF @UpdateQuery <> '' BEGIN EXEC sp_executesql @UpdateQuery PRINT '更新成功' END ELSE PRINT '找不到符合條件的欄位' |
改成
-- 如果有要更新的查詢,執行更新 IF @UpdateQuery <> '' BEGIN -- EXEC sp_executesql @UpdateQuery -- PRINT '更新成功' PRINT @UpdateQueryEND ELSE PRINT '找不到符合條件的欄位' |
********************************************************************************
TSQL, 欄位數量不固定,把 table1 中欄位名稱包含 Memo 的,欄位值都設定為 N'',
把 table1 中欄位名稱包含 Check 的,欄位值都設定為 1,
把 table1 中欄位名稱 A1 ,欄位值都設定為 N'',
把 table1 中欄位名稱 A2 ,欄位值都設定為 N'',
把 table1 中欄位名稱 A3 ,欄位值都設定為 N'',
把 table1 中欄位名稱 A4 ,欄位值都設定為 null
ChatGPT
若欄位數量不固定,可以使用動態 SQL 來構建 UPDATE 語句。以下是一個 T-SQL 的範例,可以實現你的需求:
DECLARE @ColumnName NVARCHAR(MAX) DECLARE @DynamicSQL NVARCHAR(MAX) -- 創建一個游標,獲取所有包含 "Memo" 的列名 DECLARE memo_cursor CURSOR FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table1' AND COLUMN_NAME LIKE '%Memo%' -- 動態構建 UPDATE 語句 SET @DynamicSQL = 'UPDATE table1 SET ' OPEN memo_cursor FETCH NEXT FROM memo_cursor INTO @ColumnName WHILE @@FETCH_STATUS = 0 BEGIN -- 將每個包含 "Memo" 的列的值設定為 N'' SET @DynamicSQL = @DynamicSQL + QUOTENAME(@ColumnName) + ' = N'''', ' FETCH NEXT FROM memo_cursor INTO @ColumnName END CLOSE memo_cursor DEALLOCATE memo_cursor -- 創建一個游標,獲取所有包含 "Check" 的列名 DECLARE check_cursor CURSOR FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table1' AND COLUMN_NAME LIKE '%Check%' OPEN check_cursor FETCH NEXT FROM check_cursor INTO @ColumnName WHILE @@FETCH_STATUS = 0 BEGIN -- 將每個包含 "Check" 的列的值設定為 1 SET @DynamicSQL = @DynamicSQL + QUOTENAME(@ColumnName) + ' = 1, ' FETCH NEXT FROM check_cursor INTO @ColumnName END CLOSE check_cursor DEALLOCATE check_cursor -- 將 A1、A2、A3 列的值設定為 N'',A4 列的值設定為 null SET @DynamicSQL = @DynamicSQL + 'A1 = N'''', A2 = N'''', A3 = N'''', A4 = NULL' -- 執行動態 SQL EXEC sp_executesql @DynamicSQL |
********************************************************************************
(完)
相關
[研究]T-SQL 選擇 Table1 中包含 "Memo" 的欄位名稱以及相應的欄位內容
https://shaurong.blogspot.com/2024/01/t-sql-table1-memo.html
[研究]TSQL, 把 table1 中欄位名稱包含 Memo 的,欄位值都設定為 N'
'https://shaurong.blogspot.com/2024/01/tsql-table1-memo-n.html
沒有留言:
張貼留言