Question

J'ai une instruction SQL comme ceci:

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

Dans ce $(TokenValue) le remplira une valeur d'une forme (ignorer la façon dont il le fait, il est pas important, juste que s'il y a une valeur dans le champ, il se rapporte à elle va se remplir là-dedans). Si le champ sous la forme a été laissée vide cependant, il n'y aura rien mis là, en laissant le résultat final comme ceci:

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

plutôt que

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

Comme il n'y a rien après le signe =, comment puis-je expliquer cela et assurez-vous que l'instruction SQL ne tombe pas en panne? Le jeton n'a jamais écrit nulle à sa place, toujours juste un blanc si le champ est laissé vide ... Des idées?

Merci,
Matt

Était-ce utile?

La solution

Je crains que vous ne serez pas en mesure de contourner cela.

Ceci est quelque chose que devrait être remise au niveau de l'application.

Si $ (TokenValue) IsNot un param, et vous ne comprennent pas »dans la valeur de chaîne que vous pouvez essayer d'utiliser

SET @MyVariable = '$(TokenValue)'

Cela ne fonctionne pas avec tous les types de var (INT et travaux FLOAT, mais pas décimal)

--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

Autres conseils

vous pouvez essayer de jouer avec les paramètres par défaut par exemple

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

et

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

Dans votre cas, au lieu de

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

vous finiriez avec

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

Mais qui est vraiment la solution aki. Comme d'autres ont suggéré qu'il devrait être plutôt filtré sur le niveau d'application

Edité pour SQL Server :) Si vous écrivez votre requête comme ceci:

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

Si rien est à la place de $(TokenValue), vous obtenez:

if '''' = ''''

et @MyVariable sera réglé sur NULL. S'il y a une chaîne dans le lieu de $(TokenValue), vous obtenez:

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

Parce que '' est le moyen d'échapper à une seule citation, chaque résultat de '' dans une citation à @MyVariable. Ces deux citations sont arrachés par la substring dans la clause else.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top