Pergunta

Eu tenho uma instrução SQL como esta:

DECLARE @MyVariable as varchar(50)
SET @MyVariable = $(TokenValue)

Neste o $(TokenValue) irá preencher um valor de um formulário (ignorar como ele está fazendo isso, não é importante, assim que se há um valor no campo que se refere a ele vai ficar cheia lá). Se o campo no formulário foi deixado em branco no entanto, não haverá nada colocar lá, deixando o resultado final como esta:

DECLARE @MyVariable as varchar(50)
SET @MyVariable = 

em vez de

DECLARE @MyVariable as varchar(50)
SET @MyVariable = 'FormInputValue'

Uma vez que não há nada após o =, como posso explicar isso e certifique-se a instrução SQL não falhar? O token não escreve nulo para o seu lugar, sempre apenas um em branco se o campo foi deixado vazio ... Alguma idéia?

Obrigado,
Matt

Foi útil?

Solução

Estou com medo de que você não será capaz de contornar isso.

Isso é algo que deve ser entregue no nível do aplicativo.

Se $ (TokenValue) IsNot um param, e você não incluir o "no valor de cadeia você pode tentar usar

SET @MyVariable = '$(TokenValue)'

Este não irá funcionar com todos os tipos var (int e float obras, mas não decimal)

--WORKS
DECLARE @MyVariable as INT
SET @MyVariable = ''
SELECT @MyVariable
--WORKS
DECLARE @MyVariable as FLOAT
SET @MyVariable = ''
SELECT @MyVariable
--DOES NOT WORK
DECLARE @MyVariable as DECIMAL(18,8)
SET @MyVariable = ''
SELECT @MyVariable

Outras dicas

Você pode tentar jogar com os parâmetros predefinidos por exemplo

create PROCEDURE dbo.test
    @v varchar(50) = ''
AS
BEGIN
    select @v
END
GO

e

declare @a table (v varchar(50))

insert into @a
exec dbo.test -- that represents scenario with no token

insert into @a
exec dbo.test 'blah' -- that if there is a token

select * from @a

Assim, no seu caso em vez de

DECLARE @MyVariable as varchar(50)
SET @MyVariable = $(TokenValue)

Você iria acabar com

DECLARE @MyVariable as varchar(50)
declare @a table (v varchar(50))
insert into @a
exec dbo.test  $(TokenValue)
select @myVariable = v from @a

Mas isso é realmente uma solução hacky. Como outros sugeriram que deveria ser, em vez filtrada a nível de aplicação

editado para SQL Server :) Se você escrever sua consulta como esta:

set @MyVariable = ''$(TokenValue)''
if @MyVariable = ''''
    set @MyVariable = null
else
    set @MyVariable = substring(@MyVariable,2,len(@MyVariable)-2)

Se nada está no lugar de $(TokenValue), você obtém:

if '''' = ''''

e @MyVariable será definido para NULL. Se houver uma string no lugar de $(TokenValue), você obtém:

if '''teststring''' = ''''
     ^^^^^^^^^^^^

Porque '' é o caminho para escapar de uma única citação, cada '' resulta em uma citação em @MyVariable. Essas duas citações são arrancadas pela substring na cláusula else.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top