Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. /*=============================================
  2. Modified By:
  3. Modified Date:
  4. Description:
  5. =============================================
  6. Created By: Andrew Butenko
  7. Create date: 12/07/2019
  8. Description: create temp table with PK IDENTITY and replace current table
  9. Example:
  10. exec [dbo].[RecoverPK] @TableName='Employees'
  11. exec [dbo].[RecoverPK] @TableName='Clients'
  12. exec [dbo].[RecoverPK] @TableName='My Documents'
  13. =============================================*/
  14. CREATE PROC [dbo].[RecoverPK]
  15. (
  16. @TableName sysname,
  17. @Suffix sysname='_tmp',
  18. @IdName sysname=N'ID',
  19. @SchemaName sysname='dbo'
  20. ) AS
  21. BEGIN
  22. DECLARE @SQL NVARCHAR(MAX)='', @names NVARCHAR(MAX)= ','
  23. , @TempTableName sysname = '['+@SchemaName+'].['+@TableName+@Suffix+']'
  24. , @FullTableName sysname = '['+@SchemaName+'].['+@TableName+']'
  25. SET @SQL ='
  26. IF EXISTS (SELECT TOP 1 1 FROM [sys].[tables] WHERE [object_id] = object_id('''+@TempTableName+''') )
  27. DROP TABLE '+@TempTableName+';
  28.  
  29. SELECT TOP 1 * INTO '+@TempTableName+' FROM '+@FullTableName+';
  30. TRUNCATE TABLE '+@TempTableName+';
  31. ALTER TABLE '+@TempTableName+' DROP COLUMN ['+@IdName+'];
  32. ALTER TABLE '+@TempTableName+' ADD ['+@IdName+'] INT NOT NULL PRIMARY KEY IDENTITY(1,1);'
  33. --print @SQL
  34. EXEC sp_executesql @SQL
  35.  
  36. SELECT @names +=',['+[name]+']'
  37. FROM [sys].[columns]
  38. WHERE [object_id] = object_id(@FullTableName)
  39. AND [name] != @IdName
  40. ORDER BY [COLUMN_ID]
  41.  
  42. SET @names = REPLACE(@names,',,','')
  43. SET @SQL='
  44. SET IDENTITY_INSERT '+@TempTableName+' ON;
  45. INSERT INTO '+@TempTableName+' ([ID],'+@names+')
  46. SELECT [ID],'+@names+' FROM '+@FullTableName+' WHERE [ID] IS NOT NULL;
  47. SET IDENTITY_INSERT '+@TempTableName+' OFF;
  48. DROP TABLE '+@FullTableName+';
  49. '
  50. --print @SQL
  51. EXEC sp_executesql @SQL
  52. SET @SQL = @TempTableName
  53.  
  54. EXECUTE sp_rename @TempTableName, @TableName, 'OBJECT'
  55. END
  56. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement