Tokens لبيان SQL تملأ فارغة بدلا من null جعلها تحطمها
-
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 لا تعطل؟ لا يكتب الرمز المميز مطلقا إلى مكانه، دائما فارغا فقط إذا تركت الحقل فارغا ... أي أفكار؟
شكرا،
غير لامع
المحلول
أخشى أنك لن تكون قادرا على تجاوز هذا.
هذا شيء ينبغي يتم تسليمها على مستوى التطبيق.
إذا لم تكن $ (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
بند.