【发布时间】:2019-04-22 17:37:32
【问题描述】:
如果该列不存在,我想编写一个向表添加新列的过程。我一开始是为 MySQL 编写的,它运行成功,但是当我尝试为 SQL SERVER 编写相同的过程时,我遇到了一些语法错误,我也不确定 SQL SERVER 过程是否正确并且会做同样的工作MySQL 的一个。
MySQL 程序:
SET @dbname = DATABASE();
SET @tablename = "my_table";
SET @columnname = "my_field";
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE
(table_name = @tablename)
AND (table_schema = @dbname)
AND (column_name = @columnname)
) > 0,
"SELECT 1",
CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT UNSIGNED NOT NULL;")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
SQL SERVER 过程:
DECLARE @dbname varchar(128), @tablename varchar(11), @columnname varchar(11), @preparedStatement varchar(max);
SET @dbname = DB_NAME();
SET @tablename = "my_table";
SET @columnname = "my_field";
SET @preparedStatement = (SELECT CASE(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE
(table_name = @tablename)
AND (table_schema = @dbname)
AND (column_name = @columnname)
) > 0,
"SELECT 1",
CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT UNSIGNED NOT NULL;")
));
EXEC sp_prepare @preparedStatement;
我在第 12 行遇到 GREATER THAN 运算符的语法错误:
消息 102,级别 15,状态 1,第 12 行 '>' 附近的语法不正确。
【问题讨论】:
-
您使用的是哪个版本的 SQL Server?
-
@StuartGrant 版本 14
标签: mysql sql-server stored-procedures