1

現在、テーブルaからテーブルbに情報をコピーするSPを作成しています。私が直面している問題は、コピーされる情報が表cで自由に定義できることです。したがって、例:テーブルaには、test nvarchar(50)、test1 nvarchar(79)、beta2 nvarchar(80)、およびidintの列があります。

設定テーブルでは、列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ステートメントを単独で実行すると、非常に正常に機能します...問題が発生する可能性がある場合に備えてSQLServer2005を使用しています

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 に答える