문제

다음과 같은 SQL 문이 있습니다.

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

이것에서 $(TokenValue) 양식에서 값을 채울 것입니다 (그것이 어떻게하는지 무시하십시오. 중요하지 않습니다. 필드에 값이 있으면 그와 관련이 있다는 것이 중요하지 않습니다). 그러나 양식의 필드를 비워두면 아무것도 넣지 않으며 다음과 같은 결과가 남습니다.

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

보다는

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

= 이후에 아무것도 없기 때문에 어떻게이를 설명하고 SQL 문이 충돌하지 않도록 할 수 있습니까? 토큰은 결코 그 장소에 null을 쓰지 않습니다. 필드가 비어 있으면 항상 빈 공란 ... 어떤 아이디어가 있습니까?

감사,
매트

도움이 되었습니까?

해결책

나는 당신이 이것을 우회 할 수 없을 까봐 두렵습니다.

이것은 그게 뭔가입니다 ~해야 한다 응용 프로그램 수준에서 전달하십시오.

$ (tokenValue)가 매개 변수가 아니고 사용해 볼 수있는 문자열 값에 '문자열 값을 포함하지 않으면

SET @MyVariable = '$(TokenValue)'

이것은 모든 VAR 유형에서 작동하지 않지만 (int 및 float Works, 소수점은 아닙니다)

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

다른 팁

기본 매개 변수를 사용하여 재생할 수 있습니다

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

그리고

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

그래서 당신의 경우 대신

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

당신은 끝날 것입니다

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

그러나 그것은 정말로 해킹 된 솔루션입니다. 다른 제안 된 것처럼 응용 프로그램 수준에서 오히려 필터링되어야합니다.

SQL Server에 대해 편집 :) 다음과 같이 쿼리를 작성하는 경우 :

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

대신에 아무것도 없다면 $(TokenValue), 당신은 얻는다 :

if '''' = ''''

@MyVariable이 설정됩니다 NULL. 대신 문자열이있는 경우 $(TokenValue), 당신은 얻는다 :

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

왜냐하면 '' 단일 인용문을 피하는 방법입니다. '' @MyVariable에서 하나의 인용문이 있습니다. 이 두 인용문은 substring 에서 else 절.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top