TSQL-脚本中的处理为无效



我已经制作了一个SQL脚本,其中包含一堆If/else Blocks根据收到的数据进行工作。测试后,我注意到我已经忘记了" = null"在SQL中不起作用。是否有一个不错的方法来处理SQL脚本中可能的零值?

我的脚本曾经包含以下内容:

SET @PreviousFolderId = (
    SELECT TOP(1) ObjectId
    FROM Document.DocumentFolder 
    WHERE Name = @FolderName
    AND ParentFolderId = @ParentFolderId
    ORDER BY CreationDate
)

显然,如果@parentFolderId为null,这将无法使用。我想出的解决方法是以下(请不要笑(:

DECLARE @PreviousFolderIdTable TABLE (PreviousFolderId INT)
DECLARE @Query NVARCHAR(MAX)
SET @Query = 
'SELECT TOP(1) ObjectId
    FROM Document.DocumentFolder 
    WHERE Name = ''' + @FolderName + '''
    AND ParentFolderId '
IF @ParentFolderId IS NULL
SET @Query += 'IS NULL'
ELSE SET @Query += CONCAT('= ',@ParentFolderId)
SET @Query += '
ORDER BY CreationDate'
DELETE FROM @PreviousFolderIdTable
INSERT INTO @PreviousFolderIdTable
EXECUTE(@Query)
SET @PreviousFolderId = (
    SELECT TOP(1) PreviousFolderId
    FROM @PreviousFolderIdTable
    ORDER BY PreviousFolderId
)

必须有一种更好的方法来达到相同的效果。实现这一目标的不仅有太多的代码,而且有人要花一段时间才能理解我在这里要做的事情,而第一个查询很容易阅读。

如果要允许一个空的@ParentFolderId,则可以在WHERE中使用OR

WHERE Name = @FolderName
  AND (@ParentFolderId IS NULL OR ParentFolderId = @ParentFolderId)

如果要处理NULL作为正常值,则可以使用此

WHERE Name = @FolderName
  AND (ParentFolder IS NULL AND @ParentFolderId IS NULL OR ParentFolderId = @ParentFolderId)

相关内容

  • 没有找到相关文章

最新更新