私は内部的な使用のためのプロシージャを作成しようとしています。ここではカンマで区切られたタグの文字列を追加できます。文字列分割は最初のエントリのみを返します
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE AddService
@ServiceName AS VARCHAR(MAX),
@Location AS VARCHAR(MAX),
@Description AS VARCHAR(MAX),
@PermissionType AS INT,
@Tags AS VARCHAR(MAX)
AS
BEGIN
DECLARE @ServiceId AS INT
INSERT INTO Services(NAME,LOCATION,DESCRIPTION,PERMISSIONTYPE) VALUES(@ServiceName,@Location,@Description,@PermissionType)
SET @ServiceId = (SELECT SCOPE_IDENTITY())
DECLARE @TagSplit TABLE(ID INT IDENTITY(1,1),DATA VARCHAR(MAX))
INSERT @TagSplit VALUES(SUBSTRING(@Tags,0,CHARINDEX(',',@Tags)))
WHILE EXISTS(SELECT * FROM @TagSplit)
BEGIN
DECLARE @TempId AS INT
DECLARE @Tag AS VARCHAR(MAX)
SET @TempId = (SELECT TOP 1 ID FROM @TagSplit)
SET @Tag = (SELECT TOP 1 DATA FROM @TagSplit)
INSERT INTO Tags VALUES(@ServiceId,@Tag)
DELETE FROM @TagSplit WHERE ID = @TempId
END
END
GO
しかし、私は私の「タグ」の表で見ると、@Tags
文字列を与えられた「いくつかの、事は」のみ「一部には」追加ではなく、「もの」されます。私は、SQLで適切な文字列分割を行う方法を誤解している可能性があります。
これは正しく動作しません一部です:
WHILE EXISTS(SELECT * FROM @TagSplit)
BEGIN
DECLARE @TempId AS INT
DECLARE @Tag AS VARCHAR(MAX)
SET @TempId = (SELECT TOP 1 ID FROM @TagSplit)
SET @Tag = (SELECT TOP 1 DATA FROM @TagSplit)
INSERT INTO Tags VALUES(@ServiceId,@Tag)
DELETE FROM @TagSplit WHERE ID = @TempId
END
任意のヘルプ?ジェフMODENによって
? –
@Damien_The_Unbelieverこれは、データベースマネージャのプロシージャを右クリックして "実行"をクリックするだけで、これが使用される方法がより簡単だったと思っていました。 – OmniOwl