IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'email_subscription' AND COLUMN_NAME = 'subscribe_all')
THEN
ALTER TABLE email_subscription
ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,
ADD COLUMN subscribe_category varchar(512) DEFAULT NULL;
我看了很多例子。但是此查询不起作用,出现以下错误:
错误1064(42000):您的SQL语法有错误;在第1行的’IF NOT EXISTS(SELECT * FROM
INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME
=’)附近,查看与您的MySQL服务器版本相对应的手册以使用正确的语法。
您可以为查询创建一个过程,
DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
DECLARE _count INT;
SET _count = ( SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'email_subscription' AND
COLUMN_NAME = 'subscribe_all');
IF _count = 0 THEN
ALTER TABLE email_subscription
ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,
ADD COLUMN subscribe_category varchar(512) DEFAULT NULL;
END IF;
END $$
DELIMITER ;
问题内容: 我的研究和实验还没有得到答案,所以我希望能有所帮助。 我正在修改一个应用程序的安装文件,该应用程序在以前的版本中没有我想立即添加的列。我不想手动添加列,而是要在安装文件中并且仅在表中不存在新列的情况下才添加。 该表如下创建: 如果我在create table语句下面添加以下内容,那么我不确定如果该列已经存在(可能已填充)会发生什么情况: 因此,我尝试了在某处找到的以下内容。这似乎不起作
问题内容: 在我的数据库创建脚本中,创建脚本如下所示: 第一次运行良好,但是如果我再次运行,它将在最后一行失败,并带有“写入或更新时复制密钥”。 有什么办法可以做类似的事情吗?就像我可以使用查询吗? 问题答案: 有趣的问题。您可能需要在调用语句之前禁用外键,然后再启用它们。这将允许您直接在DDL中定义外键: 例: 测试用例:
问题很简单。如何将列添加到表中,但仅当列不存在时?我在这里只找到了如何检查列是否存在的解决方案。
问题内容: 问题很简单。如何将列添加x到表中y,但仅当x列不存在时才添加?我在这里只找到解决方案,如何检查列是否存在。 问题答案: 是使用“ DO”语句的简短版本: 您不能将它们作为参数传递,您需要在客户端的字符串中进行变量替换,但这是一个自包含的查询,如果该列已经存在,则仅发出一条消息,如果不存在则添加一条消息,并且会因其他错误(例如无效的数据类型)而继续失败。 如果这些方法是来自外部来源的随机
问题内容: 我正在使用SQL Server 2005/2008。我需要向表中添加一列(如果尚不存在)。这将应用于给定数据库中的所有表。我希望我能早一点,但与此解决方案有关。 如何才能做到这一点? 这是我所拥有的: 但是我得到了错误: 错误102:“ @ tblname”附近的语法不正确。’CreatedOn’附近的语法不正确。“ @tblname”附近的语法不正确。’CreatedOn’附近的语法
问题内容: 我如何添加到URL,如果它不包括协议(例如,或)? 例: 问题答案: @nickf代码的修改版本: 认识到,,和在不区分大小写的方式。