我试图用谷歌搜索,但找不到方法
我有一个t-sql脚本,该脚本将新列添加到表中,然后根据该表中其他列的值填充该列,最后删除一些列。这一切都很好。
当我想再次运行脚本时,会出现问题。我有一个if子句,用于检查缺少的列是否存在,但是即使if子句中的代码未运行,SSMS仍会抱怨并显示错误消息。该脚本必须能够再运行一次,并且我不希望显示错误消息!
在代码中(显然是测试代码,不想在此处转储生产代码…):
create table test (
Name text,
Switch int,
ValueA int,
ValueB int)
go
insert into test values ('Name', 0, 5, 10)
if not exists (select 1 from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'ValueC' and TABLE_NAME = 'test')
begin
alter table test
add ValueC int
end
go
-- This batch rasies error when run more then once!
if exists (select 1 from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'ValueA' and TABLE_NAME = 'test')
begin
update test
set ValueC = (select case Switch
when 0 then (select (ValueA - ValueB))
when 1 then (select (ValueB - ValueA))
end)
end
go
if exists (select 1 from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'ValueA' and TABLE_NAME = 'test')
begin
alter table test drop column ValueA
end
go
select * from test
--Name 0 10 -5
这是错误消息:
Msg 207, Level 16, State 1, Line 6
Invalid column name 'ValueA'.
Msg 207, Level 16, State 1, Line 7
Invalid column name 'ValueA'.
干杯-乔克
是的,没有动态SQL是可能的,但是有一些麻烦的解决方法。我只会用EXEC
这个。
此处说明了SQL 2000中的行为
Erland Sommarskog提到“一旦查询中的所有表都存在,SQL Server会对查询执行完全检查。”
因此,通过在查询中向不存在的表添加无操作引用,可以推迟编译。通过此调整,下面的脚本可以多次运行而不会出现错误。
insert into test values ('Name', 0, 5, 10)
if not exists (select 1 from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'ValueC' and TABLE_NAME = 'test')
begin
alter table test
add ValueC int
end
go
create table #dummy
(i int)
-- This batch raised error when run more then once!
if exists (select 1 from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'ValueA' and TABLE_NAME = 'test')
begin
update test
set ValueC = (select case Switch
when 0 then (select (ValueA - ValueB))
when 1 then (select (ValueB - ValueA))
end) where not exists(select * from #dummy)
end
drop table #dummy
go
if exists (select 1 from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'ValueA' and TABLE_NAME = 'test')
begin
alter table test drop column ValueA
end
go
select * from test
--Name 0 10 -5
我有一个相当大的bean(~100个属性),映射到几个较小的对象中。可能会出现这样的情况:较小的目标对象的属性与我的源bean中的名称相同,但语义不同。 我希望MapSTRt在这个特定的情况下只映射我使用注释显式告诉的内容,而不执行通常的自动映射。 MapStruct文档告诉我: 在生成的方法实现中,源类型(…)的所有可读属性将被复制到目标类型(…)中的相应属性中。 我没有找到任何配置选项来关闭此
如果表已经存在,如何检查TarantoolSQL?
问题内容: 如何检查python脚本中是否存在程序? 假设您要检查或是否可用。我们假设他们应该在路上。 最好看到一个多平台解决方案,但就目前而言,Linux足够了。 提示: 运行命令并检查返回代码并不总是足够的,因为某些工具即使尝试也会返回非0结果。 检查命令时,屏幕上不应显示任何内容 另外,我希望能找到更通用的解决方案,例如 问题答案: import subprocess import os
问题内容: 有没有一种方法可以检查nodestore的firestore中是否存在子集合? 目前,我正在使用文档,但是我需要检查文档中是否存在子类以便写入一些数据。 问题答案: 就在这里。您可以使用docs.length来知道子集合是否存在。 我制作了一个样本来指导您,希望对您有所帮助。
问题内容: 我希望这是关于如何使用SQL语句检查SQL Server 2000/2005中是否存在表的最终讨论。 当您用Google搜索答案时,会得到很多不同的答案。有官方/后向和向前兼容的方式吗? 这是两种可能的方法。两种方法中的哪一种是标准/最佳方法? 第一种方式: 第二种方式: MySQL提供的简单 陈述。我正在寻找类似的东西。 问题答案: 对于此类查询,最好始终使用INFORMATION_
我需要检查一列是否存在,如果不存在,请添加它。根据我的研究,sqlite似乎不支持是否应该使用语句和case语句。 以下是我目前掌握的情况: 但我得到了一个错误:接近“ALTER”:语法错误。 有什么想法吗?