EXEC sp_unbindefault N'[user_table].[my_no_bh]'
go
ALTER TABLE [user_table] alter column [my_no_bh] [nchar] (20) NOT NULL
EXEC sp_bindefault N'[dbo].[mkg]', N'[user_table].[my_no_bh]'
go
以上语句,执行正常。
因为类似的表名与字段名很多,我想用变量替代,改写如下:
----------------------
declare @lc_tb varchar(30), @lc_clm varchar(30), @lc_len int
----------------------
select @lc_tb='user_table', @lc_clm='my_no_bh', @lc_len=20
----------------------
EXEC sp_unbindefault N'['+@lc_tb+'].['+@lc_clm+']'
go
ALTER TABLE [@lc_tb] alter column [@lc_clm] [nchar] (@lc_len) NOT NULL
EXEC sp_bindefault N'[dbo].[mkg]', N'['+@lc_tb+'].['+@lc_clm+']'
go
结果报错:请问正确写法应该如何写?
服务器: 消息 170,级别 15,状态 1,行 6
第 6 行: '+' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 7
第 7 行: '@lc_len' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 8
第 8 行: '+' 附近有语法错误。
------解决方案--------------------
----------------------
declare @lc_tb varchar(30), @lc_clm varchar(30), @lc_len int
----------------------
select @lc_tb='user_table', @lc_clm='my_no_bh', @lc_len=20
declare @Sql NVARCHAR(4000)
SET @Sql=N'ALTER TABLE ['+@lc_tb+'] alter column ['+@lc_clm+'] [nchar] ('+cast(@lc_len as Nvarchar)+') NOT NULL'
EXEC (@Sql)
SET @Sql=N''
SET @Sql=N'EXEC sp_unbindefault ''['+@lc_tb+'].['+@lc_clm+']'''
exec(@Sql)
SET @Sql=N''
SET @Sql=N'EXEC sp_bindefault ''default3'', ''['+@lc_tb+'].['+@lc_clm+']'' '
exec(@Sql)