gpt4 book ai didi

sql-server - 搜索一列或另一列的存在给我一个错误

转载 作者:行者123 更新时间:2023-12-03 09:41:20 25 4
gpt4 key购买 nike

IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'SiteInformation'
AND COLUMN_NAME = 'Number_Injectors')
BEGIN
SELECT [Number_Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]
END

ELSE
BEGIN
IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'SiteInformation'
AND COLUMN_NAME = 'Injectors')
BEGIN
SELECT [Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]
END
END

基本前提是我有 Visual Studio 代码,它从不同的服务器引用一个名为 SiteInfomation 的表来收集有关某台机器的信息。事情是我发现其中一些服务器具有不同的列名(Injectors 和 Number_Injectors)。 Visual Studio 中的数据变量 Injectors 正在寻找名为 Injectors 的列来收集信息。当涉及到具有名为 Number_Injectors 而不是 Injectors 的列的 SiteInformation 表时,返回的值为 NULL。 Number_Injectors 和 Injectors 是同一个,只是名称不同。

我检查了 StackOverflow 并找到了一个关于如何检查列是否存在的主题并创建了上述代码。代码的 if exist 部分工作正常,但如果我在不包含两个列名之一的服务器上使用此查询,我会收到错误消息。

示例:服务器 A 的 SiteInformation 表中有 Injectors 列。由于这段代码,它会给我一个错误:

SELECT [Number_Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]

同样,来自服务器 B 的 SiteInformation 表具有 Number_Injectors 列。由于这段代码,它会给我一个错误:

SELECT [Number_Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]

我对如何纠正它有点迷茫。尽管存在 if-exist 部分,但似乎两个 Select 查询都同时运行。任何建议都会有所帮助。

最佳答案

SQL 编译器将尝试验证这两个 select 语句,因此您需要通过将它们嵌入 EXEC 中来从编译器中“隐藏”它们,如下所示:

EXEC ('SELECT [Number_Injectors] as Injectors
FROM [BLEND].[dbo].[SiteInformation]')

关于sql-server - 搜索一列或另一列的存在给我一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com