パラメータがnullであるかどうかを確認する方法は知っていますが、空であるかどうかを確認する方法がわかりません...これらのパラメータがあり、前のパラメータが空またはnullであることを確認してから、以下のように設定します
ALTER PROCEDURE [dbo].[GetSummary]
@PreviousStartDate NVARCHAR(50) ,
@PreviousEndDate NVARCHAR(50) ,
@CurrentStartDate NVARCHAR(50) ,
@CurrentEndDate NVARCHAR(50)
AS
BEGIN
IF(@PreviousStartDate IS NULL OR EMPTY)
SET @PreviousStartdate = '01/01/2010' for example..
私は助けに感謝します。
私は時々 NULLIF を使用します...
IF NULLIF(@PreviousStartDate, '') IS NULL
@Odedや@bluefeetで提案されている方法よりも優れている理由はおそらくないでしょう。単なるスタイルの好みです。
@danihpの方法は本当にクールですが、私の疲れた古い脳はnullまたは空だと思っているときにCOALESCEに行きません:-)
一般的なパターンは次のとおりです。
IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
''
は、SQL Serverの空の文字列です。
coalesce :を使用します
IF ( COALESCE( @PreviousStartDate, '' ) = '' ) ...
coalesce
とnullif
の組み合わせはどうですか?
SET @PreviousStartDate = coalesce(nullif(@PreviousStartDate, ''), '01/01/2010')
別のオプション:
IF ISNULL(@PreviousStartDate, '') = '' ...
http://weblogs.sqlteam.com/mladenp/archive/2007/06/13/60231.aspx でこの式に基づいた関数を参照してください
使用できます:
IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
変数がnullまたは空かどうかを確認するには、次を使用します。
IF LEN(ISNULL(@var, '')) = 0
パラメータを使用する場合はオプションなので、使用します。
CREATE PROCEDURE uspGetAddress @City nvarchar(30) = NULL, @AddressLine1 nvarchar(60) = NULL
AS
SELECT *
FROM AdventureWorks.Person.Address
WHERE City = ISNULL(@City,City)
AND AddressLine1 LIKE '%' + ISNULL(@AddressLine1 ,AddressLine1) + '%'
GO
これを試すことができます:-
IF NULLIF(ISNULL(@PreviousStartDate,''),'') IS NULL
SET @PreviousStartdate = '01/01/2010'
「ヌル、空、または空白」チェックが必要な場合は、このようなLTRIM
およびRTRIM
を使用して、不要な文字列操作を回避できます。
IF COALESCE(PATINDEX('%[^ ]%', @parameter), 0) > 0
RAISERROR ...
無効な日付も確認することをお勧めします。
set @PreviousStartDate=case ISDATE(@PreviousStartDate)
when 1 then @PreviousStartDate
else '1/1/2010'
end