Ich habe eine Tabelle in einer SQL Server 2000-Datenbank, die SQL-Anweisungen in einem NTEXT
Spalte. Ich muss einen dieser Werte lesen, einige Ersetzungen vornehmen und dabei UPDATETEXT
und führen ihn dann mit sp_executesql
. Ich bin mir bewusst, dass Sie nicht erklären können, dass NTEXT
Variablen in SQL Server 2000. Um dies zu umgehen, habe ich eine temporäre Tabelle deklariert, um den Wert zu speichern und ihn zu manipulieren. Der letzte Schritt ist die Übergabe dieses Wertes an sp_executesql
aber ich kann nicht herausfinden, wie man das macht. Repräsentative Code so weit ist unten:
/*Create a temp table to store the NTEXT SQL statement*/
CREATE TABLE #temp
(
SqlStatement NTEXT
)
/*Get the statement*/
INSERT INTO #temp (SqlStatement)
SELECT [SqlStatement]
FROM [Reports]
WHERE ID = @ID
-- Format placeholders in statement
DECLARE @placeholder VARCHAR(20)
DECLARE @placeholderIndex INT
SET @placeholder = '@param1'
SELECT @placeholderIndex = (CHARINDEX(placeholder, SqlStatement) - 1) FROM #temp
/*Get a pointer to the NTEXT field*/
DECLARE @textPtr VARBINARY(16)
SELECT @textPtr = TEXTPTR(SqlStatement) FROM #temp
IF @placeholderIndex > 0
BEGIN
UPDATETEXT #temp.SqlStatement @textPtr @placeholderIndex 7 'paramValue'
END
/*
Get the statement and execute
DECLARE @SqlText NTEXT -- This is not possible in SQL 2000
*/
exec sp_executesql @SqlText
Wie kann ich die SQL-Anweisung abrufen und ausführen? Die Umwandlung in ein varchar würde die Anweisung möglicherweise abschneiden.
NB: Mir ist klar, dass dies ein mühsamer Weg ist; die Gestaltung des Systems liegt nicht in meiner Hand.