我被告知要对数据库的架构进行一些更改,因此我编写了以下脚本来执行以下操作:
当然,只有在id_to_other_table存在的情况下,才应执行整个脚本
这是我的SQL
IF EXISTS (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'title_id' AND TABLE_NAME = 'my_table'
)
BEGIN
UPDATE
my_table
SET
my_table.title = other_table.value
FROM
my_table
INNER JOIN
other_table
ON
my_table.title_id = other_table.id
WHERE other_table.language_id = 1 --hardcoded
ALTER TABLE my_table
DROP COLUMN title_id
END
我第一次运行此SQL时,代码已正确执行。当我再次运行它时,没有执行任何操作,而是出现了以下错误,并指向:ON
部分之后的行JOIN
:
Invalid column name 'my_table.title_id'
如果我将BEGIN
-END
块的内容替换为print "Does the column exists?"
正确无显示,则BEGIN
-END
块由于某种原因抢先结束...
有任何想法吗?
实际上,由于在块(批处理)中执行了多个sql语句,所以生成了该错误。批量处理后,就会应用一些规则。由于您正在更改并在1个批处理中引用同一表,因此会发生编译错误。将两个sql语句分开后,您将不会得到编译错误:
IF EXISTS (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'title_id' AND TABLE_NAME = 'my_table'
)
BEGIN
UPDATE
my_table
SET
my_table.title = other_table.value
FROM
my_table
INNER JOIN
other_table
ON
my_table.title_id = other_table.id
WHERE other_table.language_id = 1 --hardcoded
END
IF EXISTS (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'title_id' AND TABLE_NAME = 'my_table'
)
BEGIN
ALTER TABLE my_table
DROP COLUMN title_id
END
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句