【发布时间】:2011-09-21 07:22:41
【问题描述】:
我想更新一个表。我从前端获取表名和列名作为 XML 数据集。我为此写了一个光标。但它会引发错误。下面是我的光标
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PMT_Formstatus_Update_Test]
(
@XMLTableNames VARCHAR(MAX)
)
AS
BEGIN
DECLARE @docHandle INT, @ErrorMessage VARCHAR(200), @doc VARCHAR(200)
SET @doc = '<?xml version="1.0" encoding="iso-8859-1" ?>'
DECLARE @Names TABLE
(
TName VARCHAR(50),
CName VARCHAR(50),
IDField VARCHAR(50),
FunctionID INT,
ID INT,
StatusID INT
)
SET @XMLTableNames = @doc + @XMLTableNames
EXEC sp_xml_preparedocument @docHandle OUTPUT, @XMLTableNames
INSERT INTO @Names
SELECT * FROM
OPENXML(@docHandle,'NewDataSet/NameDetails',2)
WITH
(
TName VARCHAR(50),
CName VARCHAR(50),
IDField VARCHAR(50),
FunctionID INT,
ID INT,
StatusID INT
)
DECLARE @FunctionID INT
DECLARE @StatusID INT
DECLARE @ID INT
DECLARE @TableName VARCHAR(50)
DECLARE @ColumnName VARCHAR(50)
DECLARE @IDField VARCHAR(50)
DECLARE @getTables CURSOR
SET @getTables = CURSOR FOR
SELECT FunctionID, TName, CName, StatusID, IDField, ID FROM @Names
OPEN @getTables
FETCH NEXT
FROM @getTables INTO @FunctionID, @TableName, @ColumnName, @StatusID, @IDField, @ID
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE @TableName SET @ColumnName = 3 WHERE @IDField = @ID
FETCH NEXT
FROM @getTables INTO @FunctionID, @TableName, @ColumnName, @StatusID, @IDField, @ID
END
CLOSE @getTables
DEALLOCATE @getTables
END
在这种情况下如何编写更新查询?请我需要你的所有建议...
【问题讨论】:
-
您为什么需要/想要这样做?
-
实际上,我从前端获取所有上述变量作为 xml 数据集。根据我要更新对应表的值。
标签: sql sql-server-2008 sql-server-2005 variables sql-update