【发布时间】:2011-05-10 20:41:57
【问题描述】:
我有一个名为 Active 的存储过程,代码是:
CREATE PROCEDURE dbo.Active
(
@ID INT ,
@Source VARCHAR(25)
)
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX)
DECLARE @SchemaName SYSNAME
DECLARE @TableName SYSNAME
DECLARE @DatabaseName SYSNAME
DECLARE @BR CHAR(2)
SET @BR = CHAR(13) + CHAR(10)
SELECT @SchemaName = Source_Schema ,
@TableName = Source_Table ,
@DatabaseName = Source_Database
FROM Source
WHERE ID = @ID
SET @SQL = 'UPDATE Source_Table' + @BR
+ 'SET __ACTIVE = CASE WHEN rn = 1 THEN 1 ELSE 0 END' + @BR
+ 'FROM ( ' + @BR + 'SELECT ROW_NUMBER() OVER (PARTITION BY '
+ @Source + ' ORDER BY __REC_ID DESC) AS rn
, * FROM ' + @DatabaseName + '.' + @SchemaName + '.' + @TableName
+ @BR + ') Source_Table' + @BR
EXEC @SQL
END
问题是我在另一个过程中使用 thsi 过程,所以每次该过程运行时,该过程也会运行并对整个表进行更新。
该更新的主要原因是检查表上的重复项并将重复项设置为 0,其余设置为 1。
我不想对整个表运行此更新,但我希望仅对活动重复项运行更新。
有办法吗?
【问题讨论】:
标签: sql sql-server sql-server-2008 stored-procedures dynamic-sql