[英]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.