2013-04-09 58 views
0

在动态SQL语句中,一个@STU_ID值无法将数据插入到另一个表中。在这里我需要知道在执行时失败的是哪个@STU_ID。SQL Server中的动态SQL中的异常处理

CREATE PROC DATA_COPY 
(
@SRC_TABLE VARCHAR(30), 
@DEST_TABLE VARCHAR(30) 
) 
AS 
DECLARE @STU_ID INT 
BEGIN 
    DECLARE STUDENT_CURSOR CURSOR FOR 
    SELECT DISTINCT STU_ID FROM STUDENT 

    OPEN STUDENT_CURSOR 
     FETCH NEXT FROM STUDENT_CURSOR INTO @STU_ID 
    WHILE @@FETCH_STATUS = 0 
     BEGIN 

EXEC ('INSERT INTO '[email protected]_TABLE+' 
    SELECT * 
    FROM '[email protected]_TABLE+' 
    WHERE STU_ID='[email protected]_ID) 

     FETCH NEXT FROM STUDENT_CURSOR INTO @STU_ID 
    END 
    CLOSE STUDENT_CURSOR 
    DEALLOCATE STUDENT_CURSOR 
END 

你能帮我怎么做吗?

感谢

+0

你得到一个错误的上下文中捕获数据?如果可以,你可以包括它吗?最有可能的情况是'SELECT * FROM'+ @ SRC_TABLE +'WHERE STU_ID ='+ @ STU_ID'没有结果。在执行插入操作之前,您应该检查并确保有数据。此外,您正在基于SELECT *插入到表中。当架构发生变化时,这会给你带来麻烦。 – Gibron 2013-04-09 06:37:28

+0

错误消息:消息8152,级别16,状态14,行1 字符串或二进制数据将被截断。 – user1990383 2013-04-09 06:40:48

+0

我明确地更改了目标表中比源表低一列的大小,其中我的要求是在执行存储过程时收到消息是“@ STU_ID无法将数据插入目标表” – user1990383 2013-04-09 06:44:52

回答