SQL Server 2005 - 构建WHERE子句

use*_*786 1 sql t-sql sql-server

我有一个动态构建查询的存储过程.与此查询关联的where子句基于用户选择的过滤器值.不管我做什么,where子句似乎都没有设置.

-- Dynamically build the WHERE clause based on the filters
DECLARE @whereClause as nvarchar(1024)
IF (@hasSpouse > -1)
BEGIN
  IF (@hasSpouse = 0)
    SET @whereClause='p.[HasSpouse]=0'
  ELSE
    SET @whereClause='(p.[HasSpouse]=1 OR p.[HasSpouse] IS NULL)'
  END

  -- Dynamically add the next filter if necessary
  IF (@isVegan > -1)
  BEGIN
    IF (LEN(@whereClause) > 0)
    BEGIN
      SET @whereClause = @whereClause + ' AND '
    END

    IF (@isVegan = 0)
      SET @whereClause = @whereClause + 'c.[IsVegan]=0'
    ELSE
      SET @whereClause = @whereClause + '(c.[IsVegan]=1 OR c.[IsVegan] IS NULL)'
  END

  PRINT @whereClause
Run Code Online (Sandbox Code Playgroud)

@whereClause从不打印任何东西.反过来,LEN(@whereClause)始终为NULL.@isVegan和@hasSpouse值将传递到存储过程中.价值观是我的预期.

我究竟做错了什么?为什么@whereClause永远不会被设置?

谢谢您的帮助!

谢谢!

SQL*_*ace 6

首先初始化它,+ NULL始终为NULL

DECLARE @whereClause as nvarchar(1024)
SET @whereClause  = ''
Run Code Online (Sandbox Code Playgroud)