Till det använder man enklast en split funktion:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648
Hej alla!
Har följande:
ALTER PROCEDURE dbo.Page_UpdateOrder
(
@BlogId int,
@OrderIdString varchar(max)
)
AS
DECLARE @UnitPage int
DECLARE @idx int
DECLARE @tmp1 varchar(12)
DECLARE @tmp2 varchar(12)
DECLARE @ids varchar(max)
DECLARE @MyOrder int = 0
DECLARE @MenuId int
BEGIN TRY
BEGIN TRANSACTION
SET @UnitPage = (SELECT COUNT(*) FROM Menu WHERE BlogId = @BlogId)
UPDATE Menu SET [Order] = @UnitPage, Show = 0 WHERE BlogId = @BlogId
SELECT @idx = CHARINDEX(',', @OrderIdString)
WHILE (@idx > 0)
BEGIN
SET @MyOrder = (@MyOrder + 1)
SET @tmp1 = LEFT(@OrderIdString, @idx - 1)
SET @ids = RIGHT(@OrderIdString, LEN(@OrderIdString) - @idx)
SET @idx = CHARINDEX(',', @ids)
SET @MenuId = CONVERT(INT, @tmp1)
if not exists(SELECT 1 FROM Menu WHERE BlogId = @BlogId AND MenuId = @MenuId)
INSERT INTO Menu(MenuId, BlogId, Show, [Order]) VALUES(@MenuId, @BlogId, 1, @MyOrder)
else
UPDATE Menu SET [Order] = @MyOrder, Show = 1 WHERE BlogId = @BlogId AND MenuId = @MenuId
END
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
DECLARE @ErrorMessage NVARCHAR(4000);
SELECT @ErrorMessage = ERROR_MESSAGE();
RAISERROR (@ErrorMessage, 16, 1);
END CATCH
Jag vill kunna skicka in en sträng(@OrderIdString) som kan se ut: 3,2,1,2 och då loopa genom dessa nummer. (Ska även gå att enbart skicka in en 3 utan något , efter)
Som det är nu får jag ut varje siffra med ett , efter. vilket gör att den krashar vid SET @MenuId = CONVERT(INT, @tmp1)
Hur löser man detta? :stud