Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server存储过程错误。无效的标识符_Sql_Sql Server - Fatal编程技术网

SQL Server存储过程错误。无效的标识符

SQL Server存储过程错误。无效的标识符,sql,sql-server,Sql,Sql Server,我有一个存储过程,但当我从前端执行它时,会出现以下错误: 名称“创建表tmp\U 148\U 58附加项\U id” varchar250,学术id varchar250,学院id varchar250,项目\价值\数量\学院\条目 varchar250,项目\价值\注释\学院\条目 varchar250,学院进入varchar250,学院进入 varchar250,affili_category_colleges_autoid varchar20'不是 有效标识符 我的程序代码: ALTER

我有一个存储过程,但当我从前端执行它时,会出现以下错误:

名称“创建表tmp\U 148\U 58附加项\U id” varchar250,学术id varchar250,学院id varchar250,项目\价值\数量\学院\条目 varchar250,项目\价值\注释\学院\条目 varchar250,学院进入varchar250,学院进入 varchar250,affili_category_colleges_autoid varchar20'不是 有效标识符

我的程序代码:

ALTER PROCEDURE [dbo].[SpPortal_AppForAffi_Upd_Both_Lbl_And_Vals1]
   (@columnList TEXT
    ,@insScript nvarchar(1000)
    ,@collegeId INT
    ,@LoginId BIGINT)
AS
BEGIN
   DECLARE 
       @tmpTableName VARCHAR(200),
       @effectCount INT = 0, 
       @effectCountTotal INT = 0,
       @ExeQuery nvarchar(1000),
       @InsertQuery nvarchar(1000)

    SET @tmpTableName = CONCAT('#tmp_',@collegeId,'_',@LoginId);

    SET @ExeQuery = CONCAT('DROP TABLE IF EXISTS ', @tmpTableName);             

    EXECUTE @ExeQuery ;

    -- create temp table..  --
    SET @ExeQuery = CONCAT ('CREATE TABLE ' , @tmpTableName , ' (',@columnList,')' ) ;       -- here column list should be come from froent end...
    EXECUTE @ExeQuery;

    -- # create temp table..   --
    --  load data into temp table --
    SET @InsertQuery =  CONCAT(' ' , @insScript);

    EXECUTE @InsertQuery; 

    -- # load data into temp table.. --
    -- updating  affili_items_colleges master table--
    SET @effectCount=0;
    -- SET param_sp_success=0;
    Begin TRANSACTION
         Begin Try
        -- SET param_sp_success = 0;
        SET @effectCount = 0;
        SET @effectCountTotal = 0;

        SET @ExeQuery = CONCAT(' UPDATE ', @tmpTableName,' AS tmp ,affili_item_label afil,affili_items afi
        SET afil.item_lable_name = tmp.item_value_quantity_college_entry 
    ,afil.enter_on=tmp.college_enter_on 
    ,afil.enter_by= tmp.college_enter_by
    WHERE  tmp.affili_item_id=afil.affili_item_id AND tmp.affili_item_label_id = afil.affili_item_label_id 
    AND afi.is_label = 1 AND  tmp.academic_id=afil.academic_id  AND tmp.college_id=afil.college_id  
    AND tmp.affili_item_id = afi.affili_item_id  AND afi.active_status = 1 ');    

    EXECUTE @ExeQuery;

    SET @ExeQuery = CONCAT(' UPDATE ', @tmpTableName,' AS tmp ,affili_items_colleges afic,affili_items afi
    SET afic.item_value_quantity_college_entry = tmp.item_value_quantity_college_entry 
    ,afic.item_value_notes_college_entry=tmp.item_value_notes_college_entry 
     ,afic.college_enter_on=tmp.college_enter_on 
     ,afic.college_enter_by= tmp.college_enter_by
    WHERE tmp.affili_item_id=afic.affili_item_id AND tmp.affili_item_label_id = afic.affili_item_label_id 
     AND tmp.academic_id=afic.academic_id  AND tmp.college_id=afic.college_id  
     AND tmp.affili_item_id = afi.affili_item_id AND afi.is_label <> 1 AND afi.active_status = 1 ');      

    EXECUTE @ExeQuery;      

    declare @te int=0

    SET @ExeQuery = CONCAT ('SELECT  COUNT(tem.affili_item_id)  INTO @te  
    FROM ',@tmpTableName,' tem INNER JOIN affili_items afi ON tem.affili_item_id = afi.affili_item_id AND afi.is_label <> 1 
    WHERE afi.active_status = 1 ') ; 

    EXECUTE @ExeQuery;

     SET  @effectCount=0;
     SET @effectCount =  @te ;

         IF(@effectCount>0) 
         BEGIN

         SET @effectCountTotal= @effectCount+1;

         END

    -- SET param_sp_success = effectCountTotal;
 IF(@@TRANCOUNT>0)
        BEGIN
            COMMIT TRANSACTION
        END
    ELSE
        BEGIN
            ROLLBACK TRANSACTION
        END
    END TRY

    BEGIN CATCH
        ROLLBACK TRANSACTION
    END CATCH

END

有人能帮我解决这个问题吗?我将上面的查询从mysql转换为SQL Server。

首先,我真想知道为什么要使用所有这些动态创建的语句。正如我从您的脚本中所看到的,唯一的原因是您正在创建的临时表的唯一名称

但是您并不需要临时表具有唯一的名称,因为该表仅在创建它的存储过程的范围内以及从该存储过程调用的“子”过程的范围内可见

此外,根据您的错误,您的脚本似乎试图创建真实的表,而不是临时表-请参阅创建表tmp_148_58-表名不包含。因此,您可能无权在运行sp的帐户下创建实际表


我建议您重写代码,不要让混乱的动态和错误消失

另外,为什么要这样创建临时表?代码中根本没有创建/引用表tmp_148_58。错误正在从其他地方抛出。请找到相关的代码部分并发布它。我在表单中使用动态控件,在我的过程中,我像这样连接以获得临时表名SET@tmpTableName=CONCAT'tmp_33;,@collegeId,'33;,@LoginId@同样,Skumar—您的临时表名不需要唯一,因此也不需要动态创建