我正在尝试创建一个存储过程,它会在表的末尾添加两列。 SP需要3个输入,表名,状态和学年。
当我运行SP时,我收到错误:
The name "CA" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.
这是我的SP:
CREATE PROCEDURE sp_addScoolEnrollYear
@state nvarchar(2),
@shcoolYear nvarchar(15),
@tableName nvarchar(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql= N'alter table ' + quotename(@tableName) +
N'add StateEnrollID varchar(2) default ' + quotename(@state) + N'not null,
SchoolYearKey varchar(20) default ' + quotename(@shcoolYear) + N'not null'
EXECUTE sp_executesql @Sql
END
GO
这就是我执行的方式:
[dbo].[sp_addScoolEnrollYear] N'CA', N'2014-2015' , N'[dbo].[test_copy]'
答案 0 :(得分:1)
您在表名周围添加了额外的方括号,您需要在字符串周围使用'
而不是方括号,并且在单词之间使用更多空格,并且每个添加的列都需要是单独的alter:
CREATE PROCEDURE sp_addScoolEnrollYear
@state nvarchar(2),
@shcoolYear nvarchar(15),
@tableName sysname
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql=N'alter table ' + @tablename
+ N' add StateEnrollID varchar(2) default ''' + @state + N''' not null;' +char(10)
+ N'alter table ' + @tablename
+ N' add SchoolYearKey varchar(20) default ''' + @shcoolYear + N''' not null;'
select @sql;
EXECUTE sp_executesql @Sql;
END
END
GO
exec [dbo].[sp_addScoolEnrollYear] N'CA', N'2014-2015' , N'[dbo].[test_copy]'
代码生成:
alter table dbo.test_copy add StateEnrollID varchar(2) default 'CA' not null;
alter table dbo.test_copy add SchoolYearKey varchar(20) default '2014-2015' not null;
rextester演示:http://rextester.com/HEKC53724