I am trying to execute the following SQL script into the database. When I deploy it the first time, it succeeds without errors. When I deploy it the second time, it is giving the error.
I am not using an inline script in this case. I am making use of the task SqlAzureDacpacDeployment@1
IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS WHERE
OBJECT_ID = OBJECT_ID(N'[dbo].[test]') AND name = 'currency')
BEGIN
ALTER TABLE [dbo].[salesorder] ADD currency varchar(10)
END
I tried also
IF NOT EXISTS(SELECT * FROM sys.columns WHERE Name = 'currency'
AND object_id = OBJECT_ID('test'))
BEGIN
ALTER TABLE test
ADD currency varchar(10)
END
ELSE
BEGIN
PRINT 'Currency kolom bestaat reeds.'
END
What might be the solution for this in this case?
I could reproduce the issue running the same query in the Query editor hub of my SQL DB, if the column currency
alreay existed in [dbo].[salesorder]
.
You may try the SQL script in the sample pipeline below, while we need to enable system.debug
to check the output in the pipeline debug logs.
variables:
ARMSvcCnnName: ARMSvcCnnWIFAutoSub1
AzureSQLServerName: xxxxsqlserverxxx
AzureSQLDBName: xxxsqldbxxx
system.debug: true
pool:
vmImage: 'windows-latest'
steps:
- task: SqlAzureDacpacDeployment@1
displayName: 'Run SQL query'
inputs:
azureSubscription: '$(ARMSvcCnnName)'
AuthenticationType: 'servicePrincipal'
ServerName: '$(AzureSQLServerName).database.windows.net'
DatabaseName: '$(AzureSQLDBName)'
deployType: 'InlineSqlTask'
SqlInline: |
-- Check if the currency column exists in [dbo].[test]
IF NOT EXISTS (
SELECT 1
FROM SYS.COLUMNS
WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[test]')
AND name = 'currency'
)
BEGIN
-- Check if the currency column exists in [dbo].[salesorder]
IF NOT EXISTS (
SELECT 1
FROM SYS.COLUMNS
WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[salesorder]')
AND name = 'currency'
)
BEGIN
ALTER TABLE [dbo].[salesorder] ADD currency varchar(10);
PRINT 'Currency column added to [dbo].[salesorder].';
END
ELSE
BEGIN
PRINT 'Currency kolom bestaat reeds in [dbo].[salesorder].';
END
END
IpDetectionMethod: 'AutoDetect'
DeleteFirewallRule: false