Использовать нулевой результат exe c sp_execute - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть некоторые динамические значения c SQL, которые я использую, чтобы увидеть, есть ли определенное свойство для определенного клиента в таблице. Если это так, он вернет значение, если нет, он вернет ноль. Однако я хотел бы, чтобы он возвращал значение по умолчанию, если свойство не найдено.

Таблица:

CREATE TABLE [test].[customers](
    [customer] [nvarchar](256) NULL,
    [key_name] [nvarchar](256) NULL,
    [key_value] [nvarchar](256) NULL
) 
GO


INSERT INTO [test].[customers]
           ([customer]
           ,[key_name]
           ,[key_value])
     VALUES
           ('JohnDoe'
           ,'periodlength'
           ,'3')
GO

Dynami c SQL:

declare @customer as nvarchar(256) = 'JohnDoe'
declare @table as nvarchar(256) = 'test.customers'

declare @sql as nvarchar(4000)
set @sql = 'select [key_value] from ' +  @table + ' where [key_name]= ''periodlength'' and customer= ''' + @customer + ''''
exec sp_executesql @sql

Так что, когда вы спрашиваете у Джона Доу, вы получите результат 3, который идеально подходит. Тем не менее, я хотел бы вернуть 1 для Джейн Доу. Итак, я думал по линии IF exec sp_executesql @sql IS NULL 1 ELSE exec sp_executesql @sql, но это не работает.

Как изменить мой динамический c запрос, чтобы он возвращал значение по умолчанию, если свойство не найдено?

1 Ответ

1 голос
/ 09 апреля 2020

Не могли бы вы попробовать следующий запрос, но это использование возвращает только одно значение;

declare @customer as nvarchar(256) = 'JohnDoe'
    declare @table as nvarchar(256) = 'test.customers'
    DECLARE @ValReturn nvarchar(50)

    declare @sql as nvarchar(4000)
    set @sql = 'select @ValOutPut=[key_value] from ' +  @table + ' where [key_name]= ''periodlength'' and customer= ''' + @customer + ''''
    exec sp_executesql @sql , N'@ValOutPut nvarchar(25) OUTPUT' ,@ValOutPut = @ValReturn OUTPUT 

    BEGIN 
    IF @ValReturn IS NULL
    SELECT NULL
    ELSE
    SELECT @ValReturn
    END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...