使用SQL更新多行

时间:2012-06-01 09:06:41

标签: mysql sql oracle

我有两张桌子

student:
(student_id, student_name)

license:
(license_id, student_id)

我有一个学生ID列表(例如“3,4,5”)

我想更新表许可中的3行(列表大小)行,并将其student_id字段分别从null更改为3,4,5。

我该怎么做? 运行更新循环对我来说不是一个合适的解决方案。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我有一个MS SQL版本的id解析器。您可以使用它来生成一个包含单个列的表,该列包含带有varchar(max)类型参数的id。你可以在像

这样的选择语句中使用它
SELECT * FROM TABLENAME
WHERE COLUMNAME IN (SELECT value FROM parseIDs ('1,2,3'))

这是功能:

CREATE FUNCTION parseIDs  
(
    @IDList VARCHAR(MAX)
)
RETURNS @IDs TABLE (value VARCHAR(80))
AS
BEGIN
    IF @IDList is null
        RETURN

    DECLARE @Len INT, 
            @Pos INT, 
            @Cur INT

    SELECT @Pos = 0, 
           @Len = 0, 
           @Cur = 1, 
           @IDList =  CASE 
                        WHEN SUBSTRING(@IDList, LEN(@IDList), 1) = ',' THEN @IDList 
                        ELSE @IDList + ',' 
                      END

    SELECT @Pos = CHARINDEX( ',', @IDList, @Cur)
    WHILE (@Pos <> 0)
    BEGIN
        INSERT @IDs VALUES (LTRIM(SUBSTRING( @IDList, @Cur, (@Pos - @Cur))))
        SELECT @Cur = @Pos + 1
        SELECT @Pos = CHARINDEX( ',', @IDList, @Cur)
    END
    return
END