2013-10-24 30 views
-5

如何爲以下代碼創建存儲過程。如何製作存儲過程

use Test  
DECLARE @Str VARCHAR(120)  
SET @Str = 'company name'  
DECLARE @End INT  
DECLARE @Split INT  
SET @Split = 40 

declare @SomeTable table 
(
    Content varchar(120) 
) 

WHILE (LEN(@Str) > 0)  
BEGIN 
    IF (LEN(@Str) > @Split) 
    BEGIN 
     SET @End = LEN(LEFT(@Str, @Split)) - CHARINDEX(' ', REVERSE(LEFT(@Str, @Split))) 

     INSERT INTO @SomeTable VALUES (RTRIM(LTRIM(LEFT(LEFT(@Str, @Split), @End)))) 

     SET @Str = SUBSTRING(@Str, @End + 1, LEN(@Str)) 
    END 
    ELSE 
    BEGIN 
     INSERT INTO @SomeTable VALUES (RTRIM(LTRIM(@Str))) 
     SET @Str = '' 
    END 
END 

SELECT * 
FROM @SomeTable 
+1

你有*嘗試*增加你的代碼存儲過程? – LittleBobbyTables

+3

一些非常基本的搜索會給你很多教程和例子。對不起,但由於缺乏努力而失望 – freefaller

回答

1
CREATE PROCEDURE dbo.ThisIsNotHard 
    @Str VARCHAR(120), 
    @Split INT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @SomeTable table 
    (
    Content VARCHAR(120) 
); 

    WHILE (LEN(@Str) > 0)  
    BEGIN 
     IF (LEN(@Str) > @Split) 
     BEGIN 
     SET @End = LEN(LEFT(@Str,@Split))-CHARINDEX(' ',REVERSE(LEFT(@Str, @Split))); 

     INSERT @SomeTable(Content) SELECT RTRIM(LTRIM(LEFT(LEFT(@Str,@Split),@End))); 

     SET @Str = SUBSTRING(@Str,@End+1,LEN(@Str)); 
     END 
     ELSE 
     BEGIN 
     INSERT @SomeTable(Content) SELECT RTRIM(LTRIM(@Str)); 
     SET @Str = ''; 
     END 
    END 

    SELECT Content FROM @SomeTable; 
END 
GO 

現在你可以這樣調用:

EXEC dbo.ThisIsNotHard @Str = 'Company name', @Split = 40; 
+0

非常感謝。我在Google上嘗試過自己,但沒有成功。我在這裏提出我的問題,一個人給我反面投票。用戶會得到任何積分給其他用戶的負面評價嗎? – user2906622

+1

@ user2906622不,沒有低調投票問題的積分。這是爲了鼓勵人們提出更好的問題(或者不要問簡單的研究可以更快解決的問題)。例如,[谷歌搜索「基本存儲過程語法」](https://www.google.com/search?q=basic+stored+procedure+syntax)產生了大量命中... –

2

最簡單的情況下把它轉換成一個存儲過程將是:

use Test  

CREATE PROCEDURE [dbo].[IGotSomeoneonStackOverflowToWriteThisforMe] 
AS 

DECLARE @Str VARCHAR(120)  
SET @Str = 'company name'  
DECLARE @End INT  
DECLARE @Split INT  
SET @Split = 40 

declare @SomeTable table 
(
    Content varchar(120) 
) 

WHILE (LEN(@Str) > 0)  
BEGIN 
    IF (LEN(@Str) > @Split) 
    BEGIN 
     SET @End = LEN(LEFT(@Str, @Split)) - CHARINDEX(' ', REVERSE(LEFT(@Str, @Split))) 

     INSERT INTO @SomeTable VALUES (RTRIM(LTRIM(LEFT(LEFT(@Str, @Split), @End)))) 

     SET @Str = SUBSTRING(@Str, @End + 1, LEN(@Str)) 
    END 
    ELSE 
    BEGIN 
     INSERT INTO @SomeTable VALUES (RTRIM(LTRIM(@Str))) 
     SET @Str = '' 
    END 
END 

SELECT * 
FROM @SomeTable 

GO 

EXEC [dbo].[IGotSomeoneonStackOverflowToWriteThisforMe]