Here is a generic version.
Usage: EXEC TableRowCopy '[table_name]', [row_id]
sample: EXEC TableRowCopy 'Customers', 32767
Make sure you change the
{
@IdColumnName VARCHAR(50) = 'Id'
}
to reflect the actual column name of your ID column. This SP also assume auto-generated ID's
{
/****** Object: StoredProcedure [dbo].[TableRowCopy] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TableRowCopy](
@TableName VARCHAR(50),
@WhereIdValue INT,
@IdColumnName VARCHAR(50) = 'Id'
)
AS
BEGIN
DECLARE @columns VARCHAR(5000), @query VARCHAR(8000);
SET @query = '' ;
SELECT @columns =
CASE
WHEN @columns IS NULL THEN column_name
ELSE @columns + ',' + column_name
END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (
TABLE_NAME = LTRIM(RTRIM(@TableName))
AND
column_name != LTRIM(RTRIM(@IdColumnName))
);
SET @query = 'INSERT INTO ' + @TableName + ' (' + @columns + ') SELECT ' + @columns + ' FROM ' + @TableName + ' WHERE ' + @IdColumnName + ' = ' + CAST(@WhereIdValue AS VARCHAR);
EXEC (@query);
SELECT SCOPE_IDENTITY();
END
}