2016-11-25 8 views
0

私は完全なテーブル名(スキーム+名前)を受け取るストアドプロシージャを得ました。 私はそのテーブルを見つけて、特定の列 'Clumn_Name'を持っているかどうかを確認し、実際にそれがTrueかFalseに設定されているかどうかをチェックし、私はここでMSSQL 2008 R2カラムの値を取得する方法はありますか?

答えて

1

を使用して1つのトリックです。 カラムがスキーマとテーブルに存在するかどうかをチェックし、そうであれば動的SQLを作成してテーブルから値を選択します。今のところsqlはselectを実行し、すべての行を取得しないように 'WHERE ID = 1'を設定します。ちょうどこれを適応させ、あなたが望む結果を何でもしてください。

DECLARE @schemaName varchar(1000) = '<enter correct schema name here>' 
DECLARE @tableName varchar(1000) = '<enter correct table name here>' 
DECLARE @columnName varchar(1000) = '<enter correct column name here>' 

IF EXISTS(
SELECT 1 
FROM sys.columns c 
    JOIN sys.tables t ON c.object_id = t.object_id 
    JOIN sys.schemas s ON s.schema_id = t.schema_id 
WHERE s.name = @schemaName 
AND t.name = @tableName 
AND c.name = @columnName 
) BEGIN 

    DECLARE @test nvarchar(1000); 
    DECLARE @sqlCommand nvarchar(1000) 
    SET @sqlCommand = 'SELECT TOP 1 @test = ' + @columnName + ' FROM ' + @schemaName + '.' + @tableName + ' WHERE ID = 1'; 
    EXECUTE sp_executesql @sqlCommand, N'@test nvarchar(1000) OUTPUT', @[email protected]; 

END; 
+0

ありがとう、ちょうど私が必要とするもの! ほんの少しのメモ、私はそれが動作するように実行行を変更しなければなりませんでした。 N '@ test bit out'、@test out – kresa

0

を使用しています

は、これはうまくいくかもしれないCol_length

IF Col_length('scheme.Tablename', 'Column_Name') IS NOT NULL 
    SELECT 'True' 
ELSE 
    SELECT 'False' 
0
 
SELECT CASE WHEN COL_LENGTH('TABLE_NAME','COLUMN_NAME') IS NULL THEN 'FALSE' ELSE 'TRUE' END 
関連する問題