[英]T-SQL Check for column with IF NOT EXISTS in stored procedure
IF NOT EXISTS
语句有问题。 在使用存储过程的过程中,我使用了以下代码:
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
如果我现在启动SP,它将尝试重新创建已经存在的列,但它还将创建任何新列。 如果我将其更改为IF EXISTS
,它将不会执行任何操作。
如果我自己运行select语句,则如果该列存在,则结果为1,否则为1。 我的错误在哪里? 不能将IF NOT EXISTS
用于此目的吗?
如果要检查表是否包含某些列,请使用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.