SQL Server中的动态SQL中的异常处理
问题描述:
在动态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
你能帮我怎么做吗?
感谢
答
您可以将误差与TRY CATCH
BEGIN TRY
EXEC ('INSERT INTO '[email protected]_TABLE+'
SELECT *
FROM '[email protected]_TABLE+'
WHERE STU_ID='[email protected]_ID)
END TRY
BEGIN CATCH
PRINT 'ERROR WITH VALUE @STU_ID = ' + CONVERT(VARCHAR,@STU_ID)
END CATCH
+0
非常感谢,它的工作.. 。 – user1990383 2013-04-09 08:41:35
你得到一个错误的上下文中捕获数据?如果可以,你可以包括它吗?最有可能的情况是'SELECT * FROM'+ @ SRC_TABLE +'WHERE STU_ID ='+ @ STU_ID'没有结果。在执行插入操作之前,您应该检查并确保有数据。此外,您正在基于SELECT *插入到表中。当架构发生变化时,这会给你带来麻烦。 – Gibron 2013-04-09 06:37:28
错误消息:消息8152,级别16,状态14,行1 字符串或二进制数据将被截断。 – user1990383 2013-04-09 06:40:48
我明确地更改了目标表中比源表低一列的大小,其中我的要求是在执行存储过程时收到消息是“@ STU_ID无法将数据插入目标表” – user1990383 2013-04-09 06:44:52