sql - 设置新变量时未识别声明的变量
问题描述
我正在尝试使用分配给初始@period 变量的值编写一个 SET 查询,但该变量在 SET 中未被识别。我怎样才能使我只需要申报一次?
当我在 SET 中声明 @period 时,会显示正确的输出。但是,我需要在顶部有一个单独的 @period 声明,它可以与多个 SET 一起使用。
DECLARE @period VARCHAR(15) = '01/01/2018'
SET @SQL = 'SELECT col1, col2, right(@period,4) + left(@period,2)
FROM table'
print(@SQL)
exec(@SQL)
错误:必须声明标量变量“@period”。
需要输出
解决方案
您需要使用动态 SQL。我会推荐:
DECLARE @period VARCHAR(15) = '01/01/2018';
SET @SQL = N'SELECT col1, col2, right(@period,4) + left(@period,2)
FROM table' ;
print(@SQL)
exec sp_executesql @sql, '@period varchar(15)', @period=@period;
确保将@sql
其声明为NVARCHAR()
.
推荐阅读
- c# - 控制器可以支持带有可变字符串参数的路由吗?
- arrays - C - 将 64 个字符的数组转换为 16 个无符号整数的数组
- c# - EF Core 查询优化:我可以在 List 上使用 Contains
? - javascript - 如何在反应中使用“切片”功能?
- javascript - React 开发工具显示数据状态,控制台显示为空
- python - django postagedb 命令 refresh_from_db 导致 MemoryError 或 .DatabaseError: out of memory for query result
- html - 内容不够溢出时如何粘底?
- excel - 在 Excel 中查找今天和特定日期之间的月数
- python - 在 For 循环中更新字典中的变量
- javascript - webcomponents 中允许的页面上的非唯一 ID