Как я могу прочитать значение NTEXT и затем выполнить его, используя sp_executesql в SQL Server 2000? - PullRequest
2 голосов
/ 01 апреля 2011

У меня есть таблица в базе данных SQL Server 2000, которая хранит операторы SQL в столбце NTEXT. Мне нужно прочитать одно из этих значений, выполнить некоторые замены, используя UPDATETEXT, а затем выполнить его, используя sp_executesql. Я знаю, что вы не можете объявить NTEXT переменные в SQL Server 2000, поэтому для обхода этой проблемы я объявил временную таблицу для хранения значения и манипулирования им. Последний шаг - передать это значение sp_executesql, но я не могу понять, как это сделать. Типичный код до сих пор ниже:

/*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

Как я могу получить и выполнить инструкцию SQL? Приведение к varchar потенциально могло бы усечь утверждение.

NB: я понимаю, что это трудоемкий способ ведения дел; дизайн системы вне моего контроля.

1 Ответ

1 голос
/ 01 апреля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...