سؤال

لدي بيان 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 لا تعطل؟ لا يكتب الرمز المميز مطلقا إلى مكانه، دائما فارغا فقط إذا تركت الحقل فارغا ... أي أفكار؟

شكرا،
غير لامع

هل كانت مفيدة؟

المحلول

أخشى أنك لن تكون قادرا على تجاوز هذا.

هذا شيء ينبغي يتم تسليمها على مستوى التطبيق.

إذا لم تكن $ (Tokenvalue) palk، ولن تتضمن "في قيمة السلسلة، يمكنك محاولة استخدام

SET @MyVariable = '$(TokenValue)'

هذا لن يعمل مع جميع أنواع VAR (Worn Works Int و Float، ولكن ليس عشري)

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