2

私は現在、SQLサーバー2008で関数を使用しています。次のようなものを書こうとしています

   create function [dbo].[GetDaysStringForPivot](@date varchar(10))
   returns varchar(7000)
   as
  begin
declare @date_pivot varchar(3000)
declare @week varchar(10)
    set @week = 'week 15'
    set @date_pivot = @date_pivot + @week + @date

  return @date_pivot

関数を呼び出すと、戻り値は常に null です。デバッグを通じて、@date_pivot には何も割り当てられていないことがわかりました。不思議なことに、ここにステートメントを追加すると、正常に割り当てられます

  set @date_pivot = ''
  set @date_pivot = @date_pivot + @week + @date

理由を知っている人はいますか?

ご指摘ありがとうございます

4

2 に答える 2

1

@date_pivotこれは、null に連結しているためです。何かを割り当てる必要があるか、それができますSET CONCAT_NULL_YIELDS_NULL OFF(関数では実行できません)。

When you concatenate null values, either the concat null yields null setting of 
sp_dboption or SET CONCAT_NULL_YIELDS_NULL determines the behavior when one expression 
is NULL. With either concat null yields null or SET CONCAT_NULL_YIELDS_NULL enabled ON,
'string' + NULL returns NULL. If either concat null yields null or 
SET CONCAT_NULL_YIELDS_NULL is disabled, the result is 'string'.
于 2013-03-29T09:35:10.420 に答える
0

値を NULL と連結すると、常に NULL になります。

回避策:

declare @date_pivot varchar(3000) = ''

また

set @date_pivot = @week + ISNULL(@date, '')
于 2013-03-29T10:12:03.080 に答える