我想知道下面的存储过程有什么问题,因为我没有返回任何错误,但同时我无法更新我的 Watermarkvalue 列。它返回NULL。
ALTER PROCEDURE [dbo].[usp_UpdateWatermark]
@tableName nvarchar(500)
AS
BEGIN
DECLARE
/* ============= Variables ============= */
@watermarkValue nvarchar(MAX)
DECLARE
/* ============= Variables ============= */
@tabName nvarchar(MAX)
Set @tabName ='SELECT '+ @watermarkValue +'= MAX([LOAD_DATE]) FROM '+ @tableName
Execute sp_executesql @tabName
UPDATE dbo.WatermarkTable
SET WatermarkValue = @watermarkValue
WHERE TableName = @tableName
END
Run Code Online (Sandbox Code Playgroud)
这里我的 WatermarkValue 总是返回 NULL。水印表的列是 TableName 和 WatermarkValue,LOAD_DATE 是数据库中另一个表中的列
您从未将变量 @Watermarkvalue 设置为任何值,因此该变量的值为 NULL。
所以这一行:
Set @tabName ='SELECT '+ @watermarkValue +'= MAX([LOAD_DATE]) FROM '+ @tableName
Run Code Online (Sandbox Code Playgroud)
将始终为 NULL。
你想填充你的变量,所以认为你需要这样的东西:(更改为正确的数据类型)
ALTER PROCEDURE [dbo].[usp_UpdateWatermark]
@tableName nvarchar(500)
AS
BEGIN
DECLARE
/* ============= Variables ============= */
@watermarkValue nvarchar(MAX)
DECLARE
/* ============= Variables ============= */
@tabName nvarchar(MAX)
DECLARE @ParmDefinition nvarchar(500);
SET @ParmDefinition = N'@watermarkValue int OUTPUT';
SELECT @tabName = N'SELECT @watermarkValue = MAX(ID) FROM ' + @tablename;
Execute sp_executesql @tabName,@ParmDefinition,@watermarkValue=@watermarkValue OUTPUT;
UPDATE dbo.WatermarkTable
SET WatermarkValue = @watermarkValue
WHERE TableName = @tableName
END
Run Code Online (Sandbox Code Playgroud)