gpt4 book ai didi

sql-server - SQL Server - 当列不存在时 TSQL 失败

转载 作者:行者123 更新时间:2023-12-05 03:11:56 24 4
gpt4 key购买 nike

我编写了一个 T-SQL 脚本来更新生产中的现有数据库。

基本上,如果列存在,脚本必须创建一个新表,将现有数据插入新表,最后删除该列。

  1. 检查列是否存在于 (dbo.Patient)1.1 创建新表(dbo.PatientPhoto)1.2 将数据从 dbo.Patient.Photo 迁移到 dbo.PatientPhoto1.3 删除列 dbo.Patient.Photo

  2. 如果列不存在,什么都不做...

脚本在列存在时工作正常,但在列不存在时失败...如果列不存在,它看起来像是进入“IF”子句事件。

脚本:

-- Vérifier si la colonne Photo exists dans la table patient
IF EXISTS(SELECT * FROM sys.columns
WHERE Name = N'Photo' AND Object_ID = Object_ID(N'Patient'))
BEGIN
-- Vérifier si la table PatientPhoto existe et la créer si ce n'Est pas le cas
IF (NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'PatientPhoto'))
BEGIN
CREATE TABLE [dbo].[PatientPhoto](
Id INT IDENTITY(1,1) NOT NULL,
PatientId UNIQUEIDENTIFIER NOT NULL,
[Photo] [varbinary](max) NOT NULL
)
END


-- Vider la table PatientPhoto
DELETE FROM dbo.PatientPhoto

-- Populer la table PatientPhoto avec le contenu de la table patient
INSERT INTO PatientPhoto(PatientId, Photo)
SELECT Id, Photo FROM dbo.Patient
WHERE Photo IS NOT NULL

-- Supprimer la colonne Photo de la table patient
ALTER TABLE dbo.Patient DROP COLUMN Photo
END

最佳答案

正确,SQL Server 必须能够在执行之前验证您的整个查询;即使它包含一个 IF 语句,该语句会阻止它尝试访问不存在的列。如果该列不存在,它不会让此查询执行,因为它不会验证。

解决此问题的一种方法是对脚本中需要可能不存在的列的部分使用动态 sql,因为 SQL Server 在执行之前不会尝试验证动态 sql。

关于sql-server - SQL Server - 当列不存在时 TSQL 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703300/

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