使用 SQL Server 2008,我想在不知道字段名称的情况下复制表的一行。我的关键问题:随着表格随着时间的推移而增长和变异,我希望这个复制脚本继续工作,而我不必写出 30 多个不断变化的字段,呃。
当然,还有一个问题是不能复制 IDENTITY 字段。
我下面的代码确实有效,但我想知道是否有比我的拼凑文本字符串 SQL 语句更合适的方法?
所以提前谢谢你。这是我的(是的,有效的)代码 - 我欢迎提出改进建议。托德
alter procedure spEventCopy
@EventID int
as
begin
-- VARS...
declare @SQL varchar(8000)
-- LIST ALL FIELDS (*EXCLUDE* IDENTITY FIELDS).
-- USE [BRACKETS] FOR ANY SILLY FIELD-NAMES WITH SPACES, OR RESERVED WORDS...
select @SQL = coalesce(@SQL + ', ', '') + '[' + column_name + ']'
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'EventsTable'
and COLUMNPROPERTY(OBJECT_ID('EventsTable'), COLUMN_NAME, 'IsIdentity') = 0
-- FINISH SQL COPY STATEMENT...
set @SQL = 'insert into EventsTable '
+ ' select ' + @SQL
+ ' from EventsTable '
+ ' where EventID = ' + ltrim(str(@EventID))
-- COPY ROW...
exec(@SQL)
-- REMEMBER NEW ID...
set @EventID = @@IDENTITY
-- (do other stuff here)
-- DONE...
-- JUST FOR KICKS, RETURN THE SQL STATEMENT SO I CAN REVIEW IT IF I WISH...
select EventID = @EventID, SQL = @SQL
end