2013-01-16 51 views
1

我目前正在創建一個SP,將表a中的信息複製到表b中。 我面臨的問題是,將複製的信息可以在表c中自由定義。 因此,例如: 表一個具有它被定義的列測試和TEST1應的列測試爲nvarchar(50),TEST1爲nvarchar(79),β2-爲nvarchar(80)和ID INTT-SQL複製現有的列信息

在設置表從表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
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 
+0

謝謝你的提示,這是否意味着我需要創建的是有一個長度的所有類型的情況下(如爲nvarchar,NCHAR ...)在定義?除此之外,類型定義並不完全相同,它是nvarchar(100)而不是nvarchar(50),但我認爲我可以用它排序或生活:) – nja

+0

@nja是的,你需要檢查所有類型有一個長度;)可能檢查字符串的長度。 –