从insert插入到exec中的非预期结果stored_procedure()

时间:2013-06-19 13:53:10

标签: sql stored-procedures sql-server-2008-r2

我正在创建一个包含单个nvarchar列的临时表。我有一个存储过程,它返回一个字符串列表。我想在顶部添加一条记录,在底部添加一条记录以及返回我的存储过程的数据。

以下是我的sp代码段:

CREATE TABLE #tempData (col1 nvarchar(4000)) 
INSERT INTO #tempData values('SET IDENTITY_INSERT ['+@table_name+'] ON')
INSERT INTO #tempData EXEC (@Actual_Values)
INSERT INTO #tempData values('SET IDENTITY_INSERT ['+@table_name+'] OFF')
select * from #tempData
DROP TABLE #tempData

预期:

SET IDENTITY_INSERT ['+@table_name+'] ON
records returned from sp
SET IDENTITY_INSERT ['+@table_name+'] OFF

返回:

SET IDENTITY_INSERT ['+@table_name+'] ON
some records returned from sp
SET IDENTITY_INSERT ['+@table_name+'] OFF
remainingrecords returned from sp

为什么存储过程中的所有记录都不按顺序排列。我在哪里解释错误? 请用我的疑问语言和长度来饶恕我。

2 个答案:

答案 0 :(得分:3)

从表格中选择时无法保证订单。如果您需要按顺序返回的字符串,则需要添加一个订单列。你可以试试这个:

CREATE TABLE #tempData (ID int IDENTITY(1,1), col1 nvarchar(4000))
INSERT INTO #tempData values('SET IDENTITY_INSERT ['+@table_name+'] ON')
INSERT INTO #tempData EXEC (@Actual_Values)
INSERT INTO #tempData values('SET IDENTITY_INSERT ['+@table_name+'] OFF')
select * from #tempData ORDER BY ID
DROP TABLE #tempData

答案 1 :(得分:-1)

您也可以尝试

select * from #tempData
ORDER BY CASE WHEN RIGHT(col1,2) = 'ON' THEN 0
              WHEN RIGHT(col1,3) = 'OFF' THEN 2
              ELSE 1 END

假设您的Sp值不以ONOFF

结尾