如何根据动态查询结果的值执行动态查询

时间:2015-07-06 20:16:52

标签: sql sql-server sql-server-2008

我在SP下方,想要query 3 query 2 = 0 or的值并且想要返回null

的值时,请执行query 1 and query 2/query 3

当我执行SP时,我在@val1 = 50中有一个值,但它仍在if loop内,我只想返回@val@val1但我是获得5个值

exec usp_GetDefaultValue 'HQP','home','ConDefault','12345'

结果:

HQP:0 //查询1 HQP:50 //查询2 @val:0 @ val1:0任何人都可以帮助我

ALTER PROCEDURE [dbo].[usp_GetDefaultValue]

    @Service varchar(20), @LOB varchar(10), @Scenario varchar(20), @Num varchar(10)

AS
BEGIN

    SET NOCOUNT ON;
    DECLARE @val as int
    DECLARE @val1 as int
    DECLARE    @Value  AS NVARCHAR(MAX)
    DECLARE    @DefValue  AS NVARCHAR(MAX)

    set @Value =  'SELECT '  + @Service + ' from PDetail where LOB = ''' + @LOB  + ''' and Scenario =  ''' + @Scenario + '''  and Number = ''' + @Num + ''' '  -- query 1
    set @DefValue =  'SELECT '  + @Service + ' from PDetail where LOB = ''' + @LOB  + ''' and Scenario =  ''none''  and Number =''none''  and pid = 1'         -- query 2

    exec @val = sp_executesql @Value
    exec @val1 = sp_executesql @DefValue

    if (@val1 = 0 or @val1 = null)  
        begin
            set @DefValue = null
            set @DefValue =  'SELECT '  + @Service + ' from PDetail where LOB = ''' + @LOB  + ''' and Scenario =  ''none''  and pid = 2'               -- query 3
            exec @val1 = sp_executesql @DefValue
        end

    select @val,@val1  -- want to return only two values

END

1 个答案:

答案 0 :(得分:2)

我建议你改变

  if (@val1 = 0 or @val1 = null) 

  if (@val1 IS NULL or @val1 = 0) 

请记住,这是SQL,检查null的正确方法是使用IS NULL

相关问题