如果列存在,我如何获得列的值?

时间:2016-11-25 06:07:18

标签: sql sql-server sql-server-2008-r2

我有一个存储过程,它接收完整的表名(scheme + name)。 我需要找到该表并检查它是否具有特定列'Clumn_Name',如果确实需要检查它是否设置为True或False并对其执行一些操作。

我使用的是mssql 2008 R2

3 个答案:

答案 0 :(得分:1)

这可能有用。 它将检查该列是否存在于模式和表中,如果存在,它将创建一个动态sql以从表中选择值。现在,sql只进行选择,我设置了一个' 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', @test=@test;

END;

答案 1 :(得分:0)

以下是使用Col_length

的一个技巧
IF Col_length('scheme.Tablename', 'Column_Name') IS NOT NULL
  SELECT 'True'
ELSE
  SELECT 'False' 

答案 2 :(得分:0)

SELECT CASE WHEN  COL_LENGTH('TABLE_NAME','COLUMN_NAME') IS NULL THEN 'FALSE' ELSE 'TRUE' END