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),'')
所以我正在 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),'')