我在sql server 2000数据库中有一个表,它将sql语句存储在NTEXT列中。我需要读取其中一个值,使用UPDATETEXT对其执行一些替换,然后使用sp_executesql执行它。我知道您不能在sql server 2000中声明NTEXT变量,因此为了解决这个问题,我声明了一个临时表来存储和操作该值。最后一步是将该值传递给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可能会截断语句。
注:我意识到这是一种费劲的工作方式;系统的设计超出了我的控制。

最佳答案

sp_executesql and Long SQL Strings in SQL 2000

09-28 06:37