T-SQL复制现有的列信息

时间:2013-01-16 10:08:14

标签: sql

我正在创建一个将表a中的信息复制到表b中的SP。 我面临的问题是,可以在表c中自由定义要复制的信息。 所以例如: 表a包含测试列nvarchar(50),test1 nvarchar(79),beta2 nvarchar(80)和id int

在设置表中,定义了应将test和test1列从表a复制到表b。

我确实包括检查列是否已存在。它现在在以下几行失败:

DECLARE @dataType nvarchar(100)
DECLARE @statement nvarchar(250)

set @dataType = 
SELECT c.*, s.name 
FROM sys.columns c 
INNER JOIN sys.objects o 
ON c.object_id = o.object_id 
INNER JOIN sys.types s 
ON c.user_type_id = s.user_type_id 
WHERE o.name = 'a' AND c.name = 'test'
set @Statement = 'Alter table dbo.t_hist_Devicereport add test ' + @dataType 
exec (@Statement)

错误消息是我在SELECT附近的语法不正确但是如果我自己运行SELECT语句它的工作原理很好...... 我正在使用SQL Server 2005以防可能出现问题

1 个答案:

答案 0 :(得分:1)

DECLARE @dataType nvarchar(100)
DECLARE @statement nvarchar(250)
SELECT @dataType = CASE WHEN s.name = 'nvarchar' THEN 'nvarchar(' + CAST(c.max_length AS varchar(4)) + ')' ELSE s.name END             
FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id 
                  JOIN sys.types s ON c.user_type_id = s.user_type_id 
WHERE t.name = 'a' AND c.name = 'test'

SET @Statement = 'Alter table dbo.t_hist_Devicereport add test ' + @dataType 
EXEC sp_executesql @Statement