【问题标题】:Could not create procedure Error: Must declare the scalar variable "@TableName"无法创建过程错误:必须声明标量变量“@TableName”
【发布时间】: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


【解决方案1】:

我忘记在连接时始终关闭加密。

感谢

Cannot add a stored procedure to database due to encryption message

现在工作得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2014-08-06
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多