Я хочу изменить строки в нескольких столбцах (например, все столбцы, содержащие строку «звук»), например, заменяя «,» на «.». В дополнение к this post, я понимаю, что мне нужно использовать динамический SQL. Я создал следующую процедуру:Изменение столбцов с использованием хранимой процедуры в SQL Server
USE [myDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[RemoveStringInColumn] (@colName varchar(50), @tableName varchar(50), @to_remove varchar(50), @to_add varchar(50))
AS
DECLARE @sql nvarchar(4000)
SET @sql = 'UPDATE ' + @tableName + ' SET ' + @colName + ' = REPLACE(' + @colName + ',' + @to_remove + ','+ @to_add + ');'
PRINT @sql
EXEC sp_executesql @sql
которая вызывается:
EXEC dbo.RemoveStringInColumn 'COL_1', 'TABLE_1', ',', '.'
1) Проблема является @sql команда не содержит мало дефис arond запятой и точки. Как я могу это решить?
2) В this post они используют команду SELECT для извлечения всех имен столбцов. До сих пор мне удалось получить имена столбцов, содержащие «звук».
select COLUMN_NAME AS my_cols
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'TABLE_1' AND COLUMN_NAME LIKE '%sound%'
Как я могу поместить имена столбцов в списке и использовать цикл, чтобы пройти через них вызывая RemoveStringInColumn
процедуру?
Благодаря
Спасибо @ ППРР!. Это было очень глупо, но я не знал о двойных кавычках. Можно ли помещать столбцы в список, чтобы я мог их перебирать? – Nic
@Nic - Вы хотите сделать то же самое 'replace' для более чем одного столбца? –
точно. Я добавил несколько подробностей о моей текущей реализации. – Nic