我正在创建一个将表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以防可能出现问题
答案 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