sql - 执行 SQL Server 存储过程时出现语法错误
问题描述
ALTER PROCEDURE dbo.encrypt
@columnname NVARCHAR(100),
@TblName NVARCHAR(200)
WITH ENCRYPTION
AS
BEGIN
SET NOCOUNT ON;
DECLARE @encryptcolumn NVARCHAR(200);
DECLARE @AlterQuery NVARCHAR(200);
DECLARE @TblName NVARCHAR(200);
OPEN SYMMETRIC KEY Password_Key DECRYPTION BY CERTIFICATE PasswordCertificate;
SET @encryptcolumn = (@columnname + 'encrypt');
IF @encryptcolumn IS NOT NULL
SET @AlterQuery = 'ALTER TABLE ['+@TblName+'] add ['+@encryptcolumn+'] varbinary(max)null);'
EXEC sp_executesql @AlterQuery;
UPDATE @TblName
SET @encryptcolumn = ENCRYPTBYKEY(KEY_GUID('datamartSymKey'), CONVERT(varbinary, @columnname))
END
GO
当我尝试执行此操作时,它会引发此错误:
变量名“@TblName”已被声明。变量名称在查询批处理或存储过程中必须是唯一的。
解决方案
您收到此错误是因为您已经通过@tblName
了该过程。您可以通过删除声明并通过过程调用传递值来解决此问题。
除此之外,您必须使用EXEC
来运行更新查询,因为您的表名可能会更改。
ALTER PROCEDURE dbo.encrypt @columnname nvarchar(100), @TblName nvarchar(200) WITH ENCRYPTION AS BEGIN SET NOCOUNT ON;
DECLARE @encryptcolumn nvarchar(200);
DECLARE @AlterQuery nvarchar(200);
OPEN SYMMETRIC KEY Password_Key DECRYPTION BY CERTIFICATE PasswordCertificate;
set @encryptcolumn=(@columnname + 'encrypt');
if @encryptcolumn is not null
SET @AlterQuery='ALTER TABLE ['+@TblName+'] add ['+@encryptcolumn+'] varbinary(max)null);'
exec sp_executesql @AlterQuery;
DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'UPDATE ' +@TblName + ' SET ' + @encryptcolumn + ' = ENCRYPTBYKEY(KEY_GUID(''datamartSymKey''),CONVERT(varbinary, ' + @columnname + '))'
EXEC (@sqlCommand)
END
GO
推荐阅读
- appium-android - 无法运行为测试 Play 商店应用而编写的脚本
- ruby - 尝试将 Ruby Cucumber 转换代码更改为 Cucumber 3.0.0 替换
- python - 如何在 python 中导入 selenium WebElement
- kettle - PDI - 如何监控水壶转换和工作?
- docker - Docker compose 无法启动已在使用的服务地址?
- windows - Tomcat停止错误
- javascript - 为什么计数器不增加
- .net - 在角度组件中传递 cookie
- python - 使用放置几何图形显示/隐藏按钮
- amazon-web-services - 无法将 Spring Boot v2 Gradle 应用程序部署到 AWS Beanstalk