免責聲明:我的項目Eval SQL.NET
這裏的主人是在T-使用C#代碼的解決方案SQL使用Eval SQL.NET。
該解決方案比「EXECUTE」稍微複雜一點,但至少您可以安全使用SQL注入。 您甚至可以通過使用Regex.Replace改善解決方案。
文檔:Use regular expression in SQL
DECLARE @tableMessage TABLE (Msg VARCHAR(250))
DECLARE @tableReplace TABLE
(
Original_Word VARCHAR(50) ,
Replace_Word VARCHAR(50)
)
INSERT INTO @tableMessage
(Msg)
VALUES ('Hello, my name is Thomas and i''m from Belium.'),
('Another Template with is or is and i''m or not!')
INSERT INTO @tableReplace
(Original_Word, Replace_Word)
VALUES ('is', 'is not'),
('i''m', 'i am')
DECLARE @sqlnet SQLNET = SQLNET::New('')
DECLARE @sql VARCHAR(MAX) = 'template'
DECLARE @pos VARCHAR(10) = '0';
-- CREATE the sql and set parameter value
SELECT @sql = @sql + '.Replace(old_' + @pos + ', new_' + @pos + ')' ,
@sqlnet = @sqlnet.ValueString('old_' + @pos, Original_Word)
.ValueString('new_' + @pos, Replace_Word) ,
@pos = CAST(@pos AS INT) + 1
FROM @tableReplace
-- SET the code to evaluate
-- template.Replace(old_0, new_0).Replace(old_1, new_1)
SET @sqlnet = @sqlnet.Code(@sql).Root();
-- Evaluate the code
SELECT Msg ,
@sqlnet.ValueString('template', Msg).EvalString()
FROM @tableMessage AS A
我認爲這是一個罕見的情況下,光標可能是一個最好的解決方案 – Lamak
多少錢的話,你需要更換?總是2?或者它是可變的? –
我猜你會在這裏需要一個存儲過程。 – jarlh