SQL 문에 대한 토큰은 널 대신 빈 공백을 충돌시킵니다.
-
18-09-2019 - |
문제
다음과 같은 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
절.