如下语句
DECLARE @STA NVARCHAR(20),@DIS NVARCHAR(20)
SET @STA = '半成品'
SET @DIS = '1报废'
SET @STA = ISNULL(CASE
WHEN @DIS = '报废' THEN '废品'
ELSE NULL END,@STA)
SELECT @DIS,@STA运行的结果是:
1报废 半成 请教一下是怎么回事?有什么方法防止这种字符串截断?
DECLARE @STA NVARCHAR(20),@DIS NVARCHAR(20)
SET @STA = '半成品'
SET @DIS = '1报废'
SET @STA = ISNULL(CASE
WHEN @DIS = '报废' THEN '废品'
ELSE NULL END,@STA)
SELECT @DIS,@STA运行的结果是:
1报废 半成 请教一下是怎么回事?有什么方法防止这种字符串截断?
DECLARE @STA NVARCHAR(200), --字符串变量的长度设置得更大一些
@DIS NVARCHAR(20)
SET @STA = '半成品'
SET @DIS = '1报废'
SET @STA = ISNULL(CASE
WHEN @DIS = '报废' THEN '废品'
ELSE NULL END,@STA)
SELECT @DIS,@STA
SET @STA = '半成品'
SET @DIS = '1报废'
SET @STA = CASE
WHEN @DIS = '报废' THEN '废品'
ELSE @STA end
SELECT @DIS,@STA直接这样写就可以了嘛,出现这样的原因我想想,估计是编译器看不下去你的逻辑了...
SET @STA = '半成品'
SET @DIS = '1报废'
SET @STA= (CASE WHEN @DIS = '报废' THEN '废品' ELSE @STA END)
SELECT @DIS,@STA
@DIS NVARCHAR(20)
SET @STA = '半成品'
SET @DIS = '1报废'
SET @STA = ISNULL(CASE
WHEN @DIS = '报废' THEN '废品11'--如果把'废品'这个常量设长一些就会可以,
ELSE NULL END,@STA)
DECLARE @STA NVARCHAR(20),@DIS NVARCHAR(20)
SET @STA = '半成品'
SET @DIS = '1報廢'SET @STA = CASE WHEN @DIS = '報廢' THEN '廢品'
ELSE @STA END SELECT @DIS,@STA
请解释下原因吧 我想知道...
SET @STA = '半成品'
SET @DIS = '1报废'
SET @STA =isnull( CASE
WHEN @DIS = '报废' THEN '废品12'--then后面的值要占满3个字符的位置,就可以了.可能null也是有大小的?为了保证then和else生成的结果要等长?
ELSE null end,@STA)
SELECT @DIS,@STA这个问题和当年的不用"a++"而用"a=a+1"一样,虽然逻辑上有点无用,但结果却出乎意料~
SET @STA = '半成品'
SET @DIS = '1报废'
SET @temp =(CASE
WHEN @DIS = '报废' THEN '废品'
set @sta = isnull(@temp,@STA)
SELECT @DIS,@STA将你的那个可爱的逻辑分开来些,肯定没问题.因为分开后这样的写法无数人在用.不会出现意料之外的问题.但是可能连写在一块编译器会按照case语句中的信息给最后的结果套一个死的大小,所以导致字符串截断.另外这样的写法也不多见,完全用不找,确实可能出现问题.
DECLARE @STA NVARCHAR(200),@DIS NVARCHAR(200),@temp nvarchar(200)
SET @STA = '半成品'
SET @DIS = '1报废'
SET @temp =(CASE
WHEN @DIS = '报废' THEN '废品' end)
set @sta = isnull(@temp,@STA)
SELECT @DIS,@STA