Sql Script To set the show sort of data ( up or down )
2005-06-17 22:27
597 查看
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE dbo.MoveSequence
(
@TableName nvarchar( 200 ),
@ID uniqueidentifier,
@isUp bit = 0
)
AS
/*
Yinping
2005-06-17
To move the item's sequence up or down
@TableName the item's table
@ID the item's Id
@isUp the move action '1' up ; '0' down
*/
Set @TableName = '[' + @TableName + ']'
Declare @ExecuteString nvarchar(1000)
Declare @itemSequence float
Declare @Sequence float
Declare @rowCount int
-- get its sequence
Set @ExecuteString ='Select @Sequence = Sequence From ' + @TableName + ' Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @Sequence float output',
@TableName,@ID,@itemSequence output
-- judge the move direction
if( @isUp = 1 )
-- move up
Begin
-- judge the item is the biggest
Set @ExecuteString = 'Select @rowCount = count(*) From ' + @TableName + ' Where Sequence >' + Cast( @itemSequence As Nvarchar(100) )
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@rowCount int output, @itemSequence float ',
@TableName,@rowCount output,@itemSequence
if( @rowCount = 0 )
Begin
-- it is the biggest
-- judge if existing more than one biggest
Set @ExecuteString = 'Select @rowCount = count(*) From ' + @TableName + ' Where Sequence =' + Cast( @itemSequence As Nvarchar(100) )
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@rowCount int output, @itemSequence float ',
@TableName,@rowCount output,@itemSequence
if( @rowCount > 1)
Begin
-- more than one the biggest ,to add its sequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = (@itemSequence + 1) Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @itemSequence float ',
@TableName,@ID ,@itemSequence
return
End
Else
Begin
-- only one biggest
return
End
End
Else if( @rowCount = 1 )
Begin
-- only have one item bigger than it ,meaning it is the bigger
-- get the biggest's sequence
Set @ExecuteString ='Select @Sequence = Sequence From ' + @TableName + ' Where ID in ( Select Top 1 ID From ' + @TableName + ' Where Sequence >' + Cast( @itemSequence As Nvarchar(100) ) + ' Order by Sequence )'
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@Sequence float output, @itemSequence float ',
@TableName,@Sequence output,@itemSequence
-- add one to sequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = (@Sequence + 1) Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @Sequence float ',
@TableName,@ID ,@Sequence
return
End
Else if( @rowCount > 1 )
Begin
-- more than one item bigger than it
Set @ExecuteString ='Select @Sequence = Sum(Sequence) From ' + @TableName + ' Where ID in ( Select Top 2 ID From ' + @TableName + ' Where Sequence >' + Cast( @itemSequence As Nvarchar(100) ) + ' Order by Sequence )'
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@Sequence float output, @itemSequence float ',
@TableName,@Sequence output,@itemSequence
Set @itemSequence = @Sequence / 2
print @itemSequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = @itemSequence Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @itemSequence float ',
@TableName,@ID ,@itemSequence
return
End
Else
Begin
-- error
return
End
End
Else
-- move down
Begin
-- judge the item is the smallest
Set @ExecuteString = 'Select @rowCount = count(*) From ' + @TableName + ' Where Sequence <' + Cast( @itemSequence As Nvarchar(100) )
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@rowCount int output, @itemSequence float ',
@TableName,@rowCount output,@itemSequence
if( @rowCount = 0 )
Begin
-- it is the smallest
-- judge if existing more than one smallest
Set @ExecuteString = 'Select @rowCount = count(*) From ' + @TableName + ' Where Sequence =' + Cast( @itemSequence As Nvarchar(100) )
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@rowCount int output, @itemSequence float ',
@TableName,@rowCount output,@itemSequence
if( @rowCount > 1)
Begin
-- more than one the smallest ,to minus its sequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = (@itemSequence - 1) Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @itemSequence float ',
@TableName,@ID ,@itemSequence
return
End
Else
Begin
-- only one biggest
return
End
End
Else if( @rowCount = 1 )
Begin
-- only have one item smaller than it ,meaning it is the smaller
-- get the smallest's sequence
Set @ExecuteString ='Select @Sequence = Sequence From ' + @TableName + ' Where ID in ( Select Top 1 ID From ' + @TableName + ' Where Sequence <' + Cast( @itemSequence As Nvarchar(100) ) + ' Order by Sequence )'
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@Sequence float output, @itemSequence float ',
@TableName,@Sequence output,@itemSequence
-- minus one of its sequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = (@Sequence - 1) Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @Sequence float ',
@TableName,@ID ,@Sequence
return
End
Else if( @rowCount > 1 )
Begin
-- more than one item smaller than it
Set @ExecuteString ='Select @Sequence = Sum(Sequence) From ' + @TableName + ' Where ID in ( Select Top 2 ID From ' + @TableName + ' Where Sequence <' + Cast( @itemSequence As Nvarchar(100) ) + ' Order by Sequence )'
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@Sequence float output, @itemSequence float ',
@TableName,@Sequence output,@itemSequence
Set @itemSequence = @Sequence / 2
print @itemSequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = @itemSequence Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @itemSequence float ',
@TableName,@ID ,@itemSequence
return
End
Else
Begin
-- error
return
End
End
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE dbo.MoveSequence
(
@TableName nvarchar( 200 ),
@ID uniqueidentifier,
@isUp bit = 0
)
AS
/*
Yinping
2005-06-17
To move the item's sequence up or down
@TableName the item's table
@ID the item's Id
@isUp the move action '1' up ; '0' down
*/
Set @TableName = '[' + @TableName + ']'
Declare @ExecuteString nvarchar(1000)
Declare @itemSequence float
Declare @Sequence float
Declare @rowCount int
-- get its sequence
Set @ExecuteString ='Select @Sequence = Sequence From ' + @TableName + ' Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @Sequence float output',
@TableName,@ID,@itemSequence output
-- judge the move direction
if( @isUp = 1 )
-- move up
Begin
-- judge the item is the biggest
Set @ExecuteString = 'Select @rowCount = count(*) From ' + @TableName + ' Where Sequence >' + Cast( @itemSequence As Nvarchar(100) )
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@rowCount int output, @itemSequence float ',
@TableName,@rowCount output,@itemSequence
if( @rowCount = 0 )
Begin
-- it is the biggest
-- judge if existing more than one biggest
Set @ExecuteString = 'Select @rowCount = count(*) From ' + @TableName + ' Where Sequence =' + Cast( @itemSequence As Nvarchar(100) )
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@rowCount int output, @itemSequence float ',
@TableName,@rowCount output,@itemSequence
if( @rowCount > 1)
Begin
-- more than one the biggest ,to add its sequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = (@itemSequence + 1) Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @itemSequence float ',
@TableName,@ID ,@itemSequence
return
End
Else
Begin
-- only one biggest
return
End
End
Else if( @rowCount = 1 )
Begin
-- only have one item bigger than it ,meaning it is the bigger
-- get the biggest's sequence
Set @ExecuteString ='Select @Sequence = Sequence From ' + @TableName + ' Where ID in ( Select Top 1 ID From ' + @TableName + ' Where Sequence >' + Cast( @itemSequence As Nvarchar(100) ) + ' Order by Sequence )'
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@Sequence float output, @itemSequence float ',
@TableName,@Sequence output,@itemSequence
-- add one to sequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = (@Sequence + 1) Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @Sequence float ',
@TableName,@ID ,@Sequence
return
End
Else if( @rowCount > 1 )
Begin
-- more than one item bigger than it
Set @ExecuteString ='Select @Sequence = Sum(Sequence) From ' + @TableName + ' Where ID in ( Select Top 2 ID From ' + @TableName + ' Where Sequence >' + Cast( @itemSequence As Nvarchar(100) ) + ' Order by Sequence )'
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@Sequence float output, @itemSequence float ',
@TableName,@Sequence output,@itemSequence
Set @itemSequence = @Sequence / 2
print @itemSequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = @itemSequence Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @itemSequence float ',
@TableName,@ID ,@itemSequence
return
End
Else
Begin
-- error
return
End
End
Else
-- move down
Begin
-- judge the item is the smallest
Set @ExecuteString = 'Select @rowCount = count(*) From ' + @TableName + ' Where Sequence <' + Cast( @itemSequence As Nvarchar(100) )
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@rowCount int output, @itemSequence float ',
@TableName,@rowCount output,@itemSequence
if( @rowCount = 0 )
Begin
-- it is the smallest
-- judge if existing more than one smallest
Set @ExecuteString = 'Select @rowCount = count(*) From ' + @TableName + ' Where Sequence =' + Cast( @itemSequence As Nvarchar(100) )
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@rowCount int output, @itemSequence float ',
@TableName,@rowCount output,@itemSequence
if( @rowCount > 1)
Begin
-- more than one the smallest ,to minus its sequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = (@itemSequence - 1) Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @itemSequence float ',
@TableName,@ID ,@itemSequence
return
End
Else
Begin
-- only one biggest
return
End
End
Else if( @rowCount = 1 )
Begin
-- only have one item smaller than it ,meaning it is the smaller
-- get the smallest's sequence
Set @ExecuteString ='Select @Sequence = Sequence From ' + @TableName + ' Where ID in ( Select Top 1 ID From ' + @TableName + ' Where Sequence <' + Cast( @itemSequence As Nvarchar(100) ) + ' Order by Sequence )'
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@Sequence float output, @itemSequence float ',
@TableName,@Sequence output,@itemSequence
-- minus one of its sequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = (@Sequence - 1) Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @Sequence float ',
@TableName,@ID ,@Sequence
return
End
Else if( @rowCount > 1 )
Begin
-- more than one item smaller than it
Set @ExecuteString ='Select @Sequence = Sum(Sequence) From ' + @TableName + ' Where ID in ( Select Top 2 ID From ' + @TableName + ' Where Sequence <' + Cast( @itemSequence As Nvarchar(100) ) + ' Order by Sequence )'
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@Sequence float output, @itemSequence float ',
@TableName,@Sequence output,@itemSequence
Set @itemSequence = @Sequence / 2
print @itemSequence
Set @ExecuteString ='Update ' + @TableName + ' Set Sequence = @itemSequence Where ID = ''' + Cast( @ID as nvarchar(50)) + ''''
Execute sp_executesql @ExecuteString ,N'@TableName nvarchar( 200 ),@ID uniqueidentifier, @itemSequence float ',
@TableName,@ID ,@itemSequence
return
End
Else
Begin
-- error
return
End
End
相关文章推荐
- This function has none of Deterministic,no sql,or reads sql data in its declaration and binary logging is enabled(you *might* want to use the less safe log_bin_trust_function_creators variable
- How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?
- How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?
- How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?
- How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?
- Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "te
- Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "te
- InnoDB: auto-extending data file ./ibdata1 is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!
- the application is not licensed to create or modify schema for this type of data
- LINQ to SQL 异常:SQL Server does not handle comparison of NText, Text, Xml, or Image data types
- In order to run a trace against SQL Server you must be a member of sysadmin fixed server role or have the ALTER TRACE permission.
- Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "te
- Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "te
- Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "te
- Unable to determine the principal end of an association between the types '***. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.
- Use View.isInEditMode() in your custom views to skip code or show sample data when shown in the IDE
- mysql5.7.12/13在安装新实例时报错:InnoDB: auto-extending data file ./ibdata1 is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero
- 10 sites to get the large data set or data corpus for free
- Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "te
- Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "te