SQL 存储过程和编码语言

SQL Stored procedure and coding language

所以我正在 SQL 服务器 (2008 R2) 上编辑现有的存储过程。由于我对 SQL 的入门级知识,我 运行 遇到了一些问题。问题是生成的报告的要求发生了变化,一个字段的值从 2 变成了 3。报告上的字段长度被以前的用户更改了,但他们从来没有考虑过数据在字段仅等于 2 个字符。 IE。 20 或 03 而不是 100。这导致报告生成如下值: '03 XX' 而不是 003XX 这是一个问题,因为接收它的系统从右到左读取它,所以它会看到这些 Null 值并拒绝整个报告。

我想做的是将现有的 SET 语句更改为条件语句,当字段值的长度仅为 2 个字符时添加填充“0”。

我目前拥有的是:

SET @SupplyQuan = ISNULL((SELECT Unit FROM dbo.Supplyvalue(@UserID)
                              WHERE Number = 3),'')

我需要的是类似于以下内容的声明。我遇到麻烦的术语是“Charactervalue”。我找不到“单元格”或字段值的 SQL 项。我在想可能是“Columnvalue”,但这似乎不正确。我确信答案是一个非常基本的答案,我可能想多了。这是代码。

SET @SupplyQuan = ISNULL((SELECT Unit FROM dbo.Supplyvalue(@UserID)
                              WHERE Number = 3),'') IF “Charactervalue=3” ELSE IF “Charactervalue=2” THEN
SET @SupplyQuan = ISNULL('0'+(SELECT Unit FROM dbo.Supplyvalue(@UserID)
                              WHERE Number = 3),'')

您可以使用 CASE 语句和 LEN() 函数。

SELECT @SupplyQuan = case 
    when (len(Unit) = 3) then Unit
    when (len(Unit) = 2) then '0' + Unit
    else ''
END
FROM dbo.Supplyvalue(@UserID)
WHERE Number = 3

但是我会先检查查询计划,如果您看到由于列名上的函数而导致的太多扫描,我会分解它。

declare @x varchar(3)
select @x = Unit FROM dbo.Supplyvalue(@UserID) WHERE Number = 3
select @SupplyQuan = CASE
    WHEN (len(@x) = 3) then Unit
    WHEN (len(@x) = 2) then '0' + Unit
    ELSE ''
end

RIGHT('0'+Unit,3) 将在 Unit 前加上 '0' 和 return 最右边的 3 个字符。

SET @SupplyQuan = ISNULL((SELECT RIGHT('0'+Unit,3) FROM dbo.Supplyvalue(@UserID) WHERE Number = 3),'')