2016-08-14 5 views
0

alterステートメントの@collの近くに構文エラーが発生します。同じ方法でカラムを追加しましたが、どのパラメータでも追加しませんでした。どのように私はパラメータで同じことをすることができますか?テーブルに列を動的に追加しているときにストアドプロシージャのパラメータを渡す方法

あなたは、動的SQLでこれを行う必要がある
create procedure sp1 
@coll nvarchar(50) 
as 
if not exists(select * from sys.columns where Name = N'coll' and Object_ID = Object_ID(N'Students')) 

begin 
    Alter table Students ADD @coll NULL 
end 
+0

あなたがエラーを取得している場合、それはあなたの質問に含めることが重要です... –

答えて

0

create procedure sp1 (
    @coll nvarchar(50) 
) as 
begin 
    if not exists(select * from sys.columns where Name = @coll and Object_ID = Object_ID(N'Students')) 

    begin 
     declare @sql nvarchar(max); 
     set @sql = 'Alter table Students ADD [' + @coll + '] NULL'; 
     exec(@sql); 
    end; 
end; 

注:私は、変数を使用するifを変更しました。それ以外の場合は、常に'coll'という名前をチェックしています。

いっそ

または、:

 set @sql = 'Alter table Students ADD ' + quotename(@coll) + ' NULL'; 
+0

次第あなたが答えたように、私は解決策を見つけました。それでも、ありがとう –

0

は、私たちは他の形で変化させる部分で非常に単純な方法で、我々はあまりにもダイナミックな方法で列が存在することを確認する必要があり、列の[データ型]を定義するために持っているようにそれを行うことができると思いますあなたはデータ型もダイナミックたいならば、ちょうど別のパラメータを追加し、ALTER文でデータ型位置でその変数を置く:

CREATE PROCEDURE sp1 (@coll NVARCHAR(50)) AS 
BEGIN 
DECLARE @sql NVARCHAR(MAX) 
SET @sql = ' 
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE Name = ''' + @coll + ''' AND Object_ID = Object_ID(''Students''))  
    ALTER TABLE Students ADD ' + @coll + ' VARCHAR(20) NULL 
ELSE 
    PRINT (''Column Already Exist'')' 

EXEC(@sql) 
END 
関連する問題