简体   繁体   English

T-SQL检查存储过程中是否存在不存在的列

[英]T-SQL Check for column with IF NOT EXISTS in stored procedure

I have a problem with IF NOT EXISTS statement. IF NOT EXISTS语句有问题。 I have used the following code inside of using a stored procedure: 在使用存储过程的过程中,我使用了以下代码:

IF NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
                         WHERE TABLE_NAME = 'tableName'
                         AND COLUMN_NAME = @fieldName
                         AND TABLE_SCHEMA = 'dbo')   
BEGIN  
       DECLARE @paramDefinitions NVARCHAR(1000)

    SET @paramDefinitions=
     '@dataType nvarchar(100) OUTPUT'
        SET @typeQuery = 'SELECT @dataType =
                  CASE 
                  WHEN s.name = ''nvarchar'' THEN ''nvarchar('' + CAST(c.max_length AS varchar(4)) + '')'' 
                      WHEN s.name = ''varchar'' THEN ''varchar('' + CAST(c.max_length AS varchar(4)) + '')''
                      WHEN s.name = ''char'' THEN ''char('' + CAST(c.max_length AS varchar(4)) + '')''
              WHEN s.name = ''nchar'' THEN ''nchar('' + CAST(c.max_length AS varchar(4)) + '')''
             ELSE s.name 
              END                 
            FROM sys.views 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 = ''tablename'' AND c.name =' + @tmpField

            EXEC sp_executesql @typeQuery, @paramDefinitions, @dataType OUTPUT

            SET @updateTable = 'Alter table dbo.tablename add ' + @field +' '+ @dataType 
            print @updateTable

        EXEC sp_executesql @updateTable  
END

If I now start the SP it tries to recreate the already existing columns, but it will also create any new column. 如果我现在启动SP,它将尝试重新创建已经存在的列,但它还将创建任何新列。 If I change it to IF EXISTS it won't do anything. 如果我将其更改为IF EXISTS ,它将不会执行任何操作。

If I run the select statement by itself I get a 1 as a result if the column exists and nothing if it doesn't. 如果我自己运行select语句,则如果该列存在,则结果为1,否则为1。 Where is my mistake? 我的错误在哪里? Is it not possible to use IF NOT EXISTS for this purpose? 不能将IF NOT EXISTS用于此目的吗?

If I want to check if a table contains some column, I use COLUMNPROPERTY : 如果要检查表是否包含某些列,请使用COLUMNPROPERTY

IF COLUMNPROPERTY(object_id('[dbo].[TABLE]'), 'COLUMN_NAME', 'AllowsNull') is NULL
BEGIN
SELECT 'The column does not exists'
END

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM