Привет, я думаю, что этот запрос может работать:
CREATE OR ALTER PROC SanitiseData
(@DataColumnName NVARCHAR(MAX),
@DataTableName NVARCHAR(MAX))
AS
BEGIN
DECLARE @Query NVARCHAR(MAX)
@Query = 'SELECT ' + @DataColumnName + ', rn = ROW_NUMBER() OVER (ORDER BY ' + @DataColumnName + ') - 1
FROM ' + @DataTableName
Exec(@Query)
Извините за плохое понимание:
Вы выполнили запрос на обновление динамически, как запрос на выбор.
@Query='Update ' + @tablename +f'set' + @collname + ‘ =´ + @newvalue + ´where ‘ +@whereclause
А потом exec @query
Exec(@query)
РЕДАКТИРОВАТЬ для пользовательской функции в примере обновления:
CREATE FUNCTION ufAleaRandomString (@InputValue varchar(MAX))
RETURNS varchar(MAX)
AS
BEGIN
DECLARE @RetourValue varchar(MAX)
SELECT @RetourValue = @InputValue + 'SomeModificationValue'
RETURN @RetourValue
END
GO
CREATE TABLE #MyTable
(PrimaryKey int PRIMARY KEY,
KeyTransacFull varchar(50)
);
GO
INSERT INTO #MyTable
SELECT 1, '|H000021|B1|'
INSERT INTO #MyTable
SELECT 2, '|H000021|B1|'
SELECT * FROM #MyTable
UPDATE #MyTable SET KeyTransacFull = dbo.ufAleaRandomString(KeyTransacFull)
SELECT * FROM #MyTable
DROP TABLE #MyTable
РЕЗУЛЬТАТ:
PrimaryKey KeyTransacFull
1 |H000021|B1|
2 |H000021|B1|
PrimaryKey KeyTransacFull
1 |H000021|B1|SomeModificationValue
2 |H000021|B1|SomeModificationValue