Pregunta

Tengo una instrucción SQL como esto:

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

En este $(TokenValue) la rellenará un valor de una forma (ignorar la forma en que lo está haciendo, que no es importante, sólo que si hay un valor en el campo que se refiere a que va a llenarse de allí). Si el campo en el formulario fue dejado en blanco sin embargo, no habrá nada puesto allí, dejando el resultado final de esta manera:

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

en lugar de

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

Dado que no hay nada después del =, ¿cómo explicar que para esto y asegurarse de que la sentencia de SQL no se cuelga? El token nunca escribe nula a su lugar, siempre a un blanco si el campo se deja vacío ... ¿Alguna idea?

Gracias, Matt

¿Fue útil?

Solución

Me temo que usted no será capaz de evitar esto.

Esto es algo que debe ser entregado a nivel de aplicación.

Si $ (TokenValue) IsNot un parámetro, y que no incluyen el 'en el valor de cadena puede probar a usar

SET @MyVariable = '$(TokenValue)'

Esto no funcionará con todos los tipos var (INT y obras flotador, pero no 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

Otros consejos

puede intentar jugar con los parámetros por defecto por ejemplo

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

y

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

Así que en su caso en lugar de

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

acabaría con

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

Pero lo que es realmente la solución hacky. Como otros sugirieron que debería ser más bien filtrada en el nivel de aplicación

Editado para SQL Server :) Si usted escribe su consulta como la siguiente:

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

Si no hay nada en el lugar de $(TokenValue), se obtiene:

if '''' = ''''

y @MyVariable se establecerá en NULL. Si hay una cadena en el lugar de $(TokenValue), se obtiene:

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

Debido '' es la manera de escapar de una comilla simple, cada '' resultados en una cita en @MyVariable. Esas dos frases son despojados por el substring en la cláusula else.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top