I want to use Dynamic SQL within a stored procedure to create a table.
Here is the call to the stored procedure:
EXEC [spCreateAColDiffTable] 'hq193.dbo.arch_con_col_s193_s202'
Here are the relevant parts of the stored procedure:
CREATE PROCEDURE sp_createAColDiffTable (@table_name nvarchar(128))
...
SET @sSQL = 'CREATE TABLE ' + @table_name + ' ( ' +
' [table_name] VARCHAR (128) NOT NULL, ' +
' [column_name] VARCHAR (128) NULL, ' +
' [what_changed] VARCHAR (128) NULL, ' +
' [sr_data_type] VARCHAR (128) NOT NULL, ' +
' [tr_data_type] VARCHAR (128) NOT NULL, ' +
' [sr_max_length] SMALLINT NOT NULL, ' +
' [tr_max_length] SMALLINT NOT NULL, ' +
' [sr_is_nullable] CHAR NULL, ' +
' [tr_is_nullable] CHAR NULL, ' +
' [sr_precision] SMALLINT NULL, ' +
' [tr_precision] SMALLINT NULL, ' +
' [sr_scale] SMALLINT NULL, ' +
' [tr_scale] SMALLINT NULL ) ' +
' ON [PRIMARY] WITH (DATA_COMPRESSION = NONE)'
PRINT @sSQL
Exec @sSQL
GO
When I run the stored procedure I receive the error:
SQL Server Database Error: The name 'CREATE TABLE hq193.dbo.arch_con_col_s193_s202 ( [table_name] VARCHAR (128) NOT NULL, [column_name] VARCHAR (128) NULL, [what_changed] VARCHAR (128) NULL, [sr_data_type] VARCHAR (128) NOT NULL, [tr_data_type] VARCHAR (128) NOT NULL, [sr_max_length] SMALLINT NOT NULL, [tr_max_length] SMALLINT NOT NULL, [sr_is_nullable] CHAR NULL, [tr_is_nullable] CHAR NULL, [sr_precision] SMALLINT NULL, [tr_precision] SMALLINT NULL, [sr_scale] SMALLINT NULL, [tr_scale] SMALLINT NULL ) ON [PRIMARY] WITH (DATA_COMPRESSION = NONE)'
is not a valid identifier.
Notice in the stored procedure I printed out the SQL before I executed it. If I cut and paste the SQL that gets printed into a query editor window it works fine.
What am I missing?