0

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 ')'."

Alex Ott
  • 80,552
  • 8
  • 87
  • 132
mxendire
  • 41
  • 1
  • 6

0 Answers0