1

我目前正在创建一个 SP,它将信息从表 a 复制到表 b 中。我面临的问题是可以在表 c 中自由定义将要复制的信息。例如:表 a 有列 test 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,以防出现问题

4

1 回答 1

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
于 2013-01-16T14:01:52.940 回答