0

次のような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 を書き込むことはありません。フィールドが空のままの場合は常に空白になります...何かアイデアはありますか?

ありがとう、
マット

4

3 に答える 3

1

たとえば、デフォルトのパラメーターで遊んでみることができます

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

しかし、それは本当にハッキーな解決策です。他の人が示唆しているように、アプリケーションレベルでむしろフィルタリングする必要があります

于 2009-12-09T16:26:47.690 に答える
0

恐れ入りますが、これを回避することはできません。

これは、アプリケーション レベルで処理する必要があります。

$(TokenValue) がパラメーターではなく、文字列値に ' を含めない場合は、使用してみてください

SET @MyVariable = '$(TokenValue)'

これは、すべての var 型で機能するわけではありません (INT と FLOAT は機能しますが、10 進数は機能しません)。

--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
于 2009-12-09T16:05:43.920 に答える
0

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 ではそれぞれが 1 つの引用符になります。substringこれらの 2 つの引用符は、else節内の theによって取り除かれます。

于 2009-12-09T16:09:48.160 に答える