我在存储过程中有以下SQL代码:
CREATE PROCEDURE sp_createAColDiffTable (@table_name nvarchar(128))
AS
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)
我这样调用存储过程:
EXEC [sp_createAColDiffTable] 'hq193.dbo.arch_con_col_s193_s202'
当我运行代码时,出现错误:
“ @table_name”附近的语法不正确。
当我用实际的表名代替@table_name
它工作正常。有人可以指出我的语法问题吗?
您将需要为此使用动态SQL,因为CREATE TABLE
它不会使用变量名。
例如
CREATE PROCEDURE sp_createAColDiffTable (@table_name nvarchar(128))
AS
DECLARE @sql nvarchar(MAX)
SET @sql = '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)';
EXEC(@sql);
请注意,虽然使用动态SQL可能会导致SQL注入,所以请确保不要将任何用户输入传递给@table_name
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句