This stored procedure is to create delta external tables in Azure Synapse serverless database.
The environment is Azure Synapse OnDemand server (serverless database).
CREATE OR ALTER PROCEDURE sp_copy_delta_to_table
(@table_name NVARCHAR(100),
@delta_file_url NVARCHAR(1000))
AS
BEGIN
IF LEN(@delta_file_url) = 0
BEGIN
RAISERROR('Delta file URL parameter cannot be empty', 16, 1)
RETURN
END
DECLARE @external_table_name NVARCHAR(100) = @table_name + '_external';
-- Build the CREATE EXTERNAL TABLE statement dynamically
DECLARE @sql NVARCHAR(MAX) = N'CREATE EXTERNAL TABLE ' + @external_table_name + ' '
SELECT @sql += QUOTENAME(COLUMN_NAME) + ' ' + DATA_TYPE +
CASE
WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL THEN '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(10)) + ')'
ELSE ''
END +
', ' -- Add a space character after the comma
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
ORDER BY ORDINAL_POSITION
SET @sql = LEFT(@sql, LEN(@sql) - 1) + ' WITH (LOCATION = ''' + @delta_file_url + ''', DATA_SOURCE = datasource_bronzedb001, FILE_FORMAT = DELTA)'
--PRINT @sql -- Add this line to print the CREATE EXTERNAL TABLE statement before executing it
-- Execute the CREATE EXTERNAL TABLE statement
EXEC (@sql)
-- Insert the data from the Delta file into the final table
SET @sql = 'INSERT INTO ' + @table_name + ' SELECT * FROM ' + @external_table_name + ''
EXEC (@sql)
END
I'm calling it like this:
EXEC sp_copy_delta_to_table 'ABC_Test', 'abfss://hhrrn@XXXXXX.dfs.core.windows.net/bronze/ext/ABC_Test';
I get this error:
Started executing query at Line 5
"Incorrect syntax near ')'."