我有一個 sp 試圖撰寫如下代碼
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[ABC]
@Food_Pickup VARCHAR(10),
@Food_Dropoff VARCHAR(10),
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[DEF] (QUOTE, COMPANY_CODE, BAID, EID)
VALUES
(@Food_Pickup,'B','A','3#') ,
(IF len(@Food_Dropoff) > 3 SUBSTRING(@Food_Dropoff,1, 3),'C', 'k', (Row INT IDENTITY(1, 1)) CONCAT('...',SUBSTRING(@Food_Dropoff,4, len(@Food_Dropoff))),'C', 'k', )
ELSE
(@Food_Dropoff,'C', 'k' ,)
END
GO
所以,我的要求是,如果我執行 sp 并將 Food_dropoff 輸入為 'Atlanta' ,如果在這種情況下輸入超過一定長度 3,那么它應該進入下一行
Exec [dbo].[ABC] 'Alabama' 'Atlanta'
那么輸出應該是這樣的
Quote COMPANY_CODE BAID EID
1 Alabama B A 3#
2 Atl C k
3 ...anta C k
uj5u.com熱心網友回復:
我不知道你的用例,但這似乎是一種存盤資料的糟糕方式。似乎存盤“亞特蘭大”會更安全。您總是可以在選擇時決議它,或者讓下游程式按照您想要的方式對其進行格式化。
話雖如此,我想你想要:
CREATE PROCEDURE [dbo].[ABC]
@Food_Pickup VARCHAR(10),
@Food_Dropoff VARCHAR(10)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[DEF] (QUOTE, COMPANY_CODE, BAID, EID)
VALUES
(@Food_Pickup,'B','A','3#') ,
(left(@Food_Dropoff, 3) ,'C', 'k', null);
if (len(@Food_Dropoff) > 3)
INSERT INTO [dbo].[DEF] (QUOTE, COMPANY_CODE, BAID, EID)
VALUES
('...' right(@Food_Dropoff, len(@Food_Dropoff)-3),'C', 'k', null)
END
這里的想法是始終插入@Food_Dropoff. 然后,如果它實際上更長,請對剩余部分進行第二次插入。
你可以看到它在這里作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/511302.html
