这个 SQL 查询有什么问题?我正在尝试更新列值

Ank*_*mar 1 mysql sql-server

我想知道下面的存储过程有什么问题,因为我没有返回任何错误,但同时我无法更新我的 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 是数据库中另一个表中的列

Yan*_*ens 5

您从未将变量 @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)