Advertisement
Guest User

Untitled

a guest
May 26th, 2015
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. --table must have at least 10000 rows, so that it doesn't get lost in NULLs. I think.
  2. DECLARE @table_name sysname, @date_column sysname, @sql NVARCHAR(4000), @lowest_date VARCHAR(20)
  3. SET @table_name = 'mytablename'
  4. SET @date_column = 'mydatefield'
  5. SET @lowest_date = '20150415'
  6.  
  7. SELECT @sql = '
  8. DECLARE @tempdate DATETIME, @target_id bigint, @max_id bigint
  9. SELECT @target_id = MAX(id) FROM ' + @table_name + ' with (NOLOCK)
  10. set @max_id = @target_id
  11. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  12.  
  13. WHILE @tempdate >''' + @lowest_date + '''
  14. BEGIN
  15. SELECT @target_id = @target_id - 10000000
  16. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  17. IF @@ROWCOUNT = 0 SET @tempdate = ''2000/01/01''
  18. END
  19. SELECT @target_id = @target_id + 10000000
  20. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  21.  
  22. WHILE @tempdate >''' + @lowest_date + '''
  23. BEGIN
  24. SELECT @target_id = @target_id - 1000000
  25. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  26. IF @@ROWCOUNT = 0 SET @tempdate = ''2000/01/01''
  27. END
  28. SELECT @target_id = @target_id + 1000000
  29. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  30.  
  31. WHILE @tempdate >''' + @lowest_date + '''
  32. BEGIN
  33. SELECT @target_id = @target_id - 100000
  34. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  35. IF @@ROWCOUNT = 0 SET @tempdate = ''2000/01/01''
  36. END
  37. SELECT @target_id = @target_id + 100000
  38. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  39.  
  40. WHILE @tempdate >''' + @lowest_date + '''
  41. BEGIN
  42. SELECT @target_id = @target_id - 10000
  43. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  44. IF @@ROWCOUNT = 0 SET @tempdate = ''2000/01/01''
  45. END
  46. SELECT @target_id = @target_id + 10000
  47. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  48.  
  49. WHILE @tempdate >''' + @lowest_date + '''
  50. BEGIN
  51. SELECT @target_id = @target_id - 1000
  52. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  53. IF @@ROWCOUNT = 0 SET @tempdate = ''2000/01/01''
  54. END
  55. SELECT @target_id = @target_id + 1000
  56. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  57.  
  58. WHILE @tempdate >''' + @lowest_date + '''
  59. BEGIN
  60. SELECT @target_id = @target_id - 100
  61. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  62. IF @@ROWCOUNT = 0 SET @tempdate = ''2000/01/01''
  63. END
  64. SELECT @target_id = @target_id + 100
  65. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  66.  
  67. WHILE @tempdate >''' + @lowest_date + '''
  68. BEGIN
  69. SELECT @target_id = @target_id - 10
  70. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  71. IF @@ROWCOUNT = 0 SET @tempdate = ''2000/01/01''
  72. END
  73. SELECT @target_id = @target_id + 10
  74. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  75.  
  76. WHILE @tempdate >''' + @lowest_date + '''
  77. BEGIN
  78. SELECT @target_id = @target_id - 1
  79. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  80. IF @@ROWCOUNT = 0 SET @tempdate = ''2000/01/01''
  81. END
  82.  
  83. SET @target_id = @target_id + 1
  84. SELECT @tempdate = ' + @date_column + ' FROM ' + @table_name + ' with (NOLOCK) WHERE id = @target_id
  85. SELECT @max_id as max_id, @target_id as lowest_id_for_date, @tempdate as value_for_LowID'
  86.  
  87. EXEC dbo.sp_executesql @sql
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement