我正在创建一个包含单个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
为什么存储过程中的所有记录都不按顺序排列。我在哪里解释错误? 请用我的疑问语言和长度来饶恕我。
答案 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值不以ON
或OFF