【发布时间】:2019-04-16 00:06:16
【问题描述】:
CREATE PROCEDURE [dbo].[sp_DropMasks]
@TableName nvarchar(127)='',
@FieldName nvarchar(127)='',
@MaskFunction nvarchar(127)=''
AS
BEGIN
declare @ATableName nvarchar(127)=''
declare @AFieldName nvarchar(127)=''
declare @AMaskFunction nvarchar(127)=''
declare @SqlStr nvarchar(max)=''
DECLARE crs CURSOR Read_Only Fast_Forward FOR
SELECT TOP 100 PERCENT
TableName=tbl.name,
ColumnName=c.name,
c.masking_function
FROM
sys.masked_columns AS c inner join
sys.tables AS tbl ON c.object_id = tbl.object_id
WHERE
is_masked=1 and
tbl.name like '%'+@TableName+'%' and
c.name like '%'+@FieldName+'%' and
c.masking_function like '%'+@MaskFunction+'%'
Open crs
Fetch Next From crs INTO @ATableName,@AFieldName,@AMaskFunction
WHILE @@FETCH_STATUS = 0
BEGIN
set @SqlStr = @SqlStr +
' ALTER TABLE ' + @ATableName +
' ALTER COLUMN ' + @AFieldName +
' DROP MASKED '
Fetch Next From crs INTO @ATableName,@AFieldName,@AMaskFunction
END
CLOSE crs
DEALLOCATE crs
if @SqlStr <> ''
exec(@SqlStr)
END;
我看不到无效的语法或缺少的声明。
错误是;
Msg 156, Level 15, State 1, Line 28 关键字附近的语法错误 “程序”。
Msg 156, Level 15, State 1, Line 28 关键字附近的语法错误 “程序”。
Msg 156, Level 15, State 1, Line 28 关键字附近的语法错误 “程序”。
Msg 137, Level 15, State 2, Line 45 必须声明标量变量 “@TableName”。
Msg 137, Level 15, State 2, Line 45 必须声明标量变量 “@TableName”。
Msg 137, Level 15, State 2, Line 45 必须声明标量变量 “@TableName”。
消息 8180,级别 16,状态 1,程序 sp_describe_parameter_encryption,第 1 行 [批处理开始第 27 行] 无法准备报表。
消息 8180,级别 16,状态 1,程序 sp_describe_parameter_encryption,第 1 行 [批处理开始第 27 行] 无法准备报表。
消息 8180,级别 16,状态 1,程序 sp_describe_parameter_encryption,第 1 行 [批处理开始第 27 行] 无法准备报表。
【问题讨论】:
-
您使用的 SQL 版本是什么?
-
版本 14.0.3038.14
-
尝试用 go 分隔过程代码
-
如果你的参数是表/列/函数名,你到底为什么要选择
nvarchar(127)作为类型/大小?sysname,此类名称实际使用的数据类型与nvarchar(128)相同。
标签: sql-server variables stored-procedures