UPDATE EIT_ARTICLE_UPLOADFILEINFO SET AID=@AID,NC_ID=0 WHERE FILEPATH IN(@FilePathItems)@FilePathItems  的传入值是 'upload/article/2008/05/05/14022281A6FCE75D334560A2C5F89A18.jpg'为什么使用传入值而导致无法更新可是在存储过程中使用以下语句可正常更新(直接固定值)UPDATE EIT_ARTICLE_UPLOADFILEINFO SET AID=@AID,NC_ID=0 WHERE FILEPATH IN('upload/article/2008/05/05/14022281A6FCE75D334560A2C5F89A18.jpg')

解决方案 »

  1.   

    用动态 SQL 语句 '动态sql语句基本语法' 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  2.   

    CREATE PROCEDURE eit_CreateArticle
    @ClassID int,
    @UserID int,
    @Title Varchar(100),
    @TITLECOLOR VARCHAR(50),
    @IntegrityTitle varchar(300),
    @CONTENT text,
    @SimpleDescription VARCHAR(300),
    @Name varchar(50),
    @Email Varchar(50),
    @Source Varchar(50),
    @WEBSITE VARCHAR(50),
    @ClickURL VARCHAR(100),
    @IMG VARCHAR(100),
    @DEL BIT,
    @HITS INT,
    @DAYHITS INT,
    @WeekHits INT,
    @MonthHits INT,
    @Recommended BIT,
    @Collections INT,
    @Auditing BIT,
    @Comments BIT,
    @CommentsLink BIT,
    @AddTime DATETIME,
    @FilePathItems varchar(8000),
    @NC_ID int
    AS
    DECLARE @ID INT
    insert into eit_Article
    (
    ClassID,
     UserID, 
    Title, 
    IntegrityTitle, 
    TitleColor, 
    Content, 
    SimpleDescription,
    Name, 
    Email, 
    Source, 
    WebSite, 
    ClickURL, 
    IMG, 
    Del, 
    Hits, 
    DayHits,
    WeekHits,
    MonthHits, 
    Recommended, 
    Collections, 
    Auditing, 
    Comments, 
    CommentsLink, 
    AddTime

    values 
    (
    @ClassID,
    @UserID, 
    @Title, 
    @IntegrityTitle, 
    @TitleColor, 
    @Content, 
    @SimpleDescription,
    @Name, 
    @Email, 
    @Source, 
    @WebSite, 
    @ClickURL, 
    @IMG, 
    @Del, 
    @Hits, 
    @DayHits, 
    @WeekHits, 
    @MonthHits, 
    @Recommended, 
    @Collections, 
    @Auditing, 
    @Comments, 
    @CommentsLink, 
    @AddTime
    )
    IF @@ERROR = 0
    BEGIN
    GOTO CREATE_ARTICLE
    END
    DECLARE @AID INT
    SET @AID = SCOPE_IDENTITY()
    CREATE_ARTICLE:
    DELETE FROM EIT_ARTICLE_UploadFileInfo_nc where ID=@NC_ID
    IF LEN(@FilePathItems) > 0
    BEGIN
    UPDATE EIT_ARTICLE_UPLOADFILEINFO SET AID=@AID,NC_ID=0 WHERE FILEPATH IN(@FilePathItems)
    END
    GO
      

  3.   

    -->参考:declare @name nvarchar(1000)
    set @name = 'sysobjects,syscolumns'set @name = replace(@name, ',', ''',''')
    exec ('select * from sysobjects where name in ('''+@name+''')')