sql - 将 SQL 函数设置为变量
问题描述
我想使用设置为以下请求的变量。
SUBSTRING( od.RequestName , LEN(od.RequestName) - CHARINDEX('.',REVERSE(od.RequestName)) + 2 , LEN(od.RequestName) );
但是,当我声明并将其设置为变量时,即 ie对 SQL 运行程序来说很奇怪vari
。od
declare @vari varchar(100)
set @vari = SUBSTRING( od.RequestName , LEN(od.RequestName) - CHARINDEX('.',REVERSE(od.RequestName)) + 2 , LEN(od.RequestName) );
SELECT
r.name, p.PageName, @vari
FROM restable r WITH (NOLOCK)
JOIN pestable p WITH (NOLOCK) ON p.ResourceId = r.ResourceId
JOIN odtable od ON od.ResourceCode = p.ResourceCode
但是,以下工作。
SELECT
r.name, p.PageName,
SUBSTRING( od.RequestName , LEN(od.RequestName) - CHARINDEX('.',REVERSE(od.RequestName)) + 2 , LEN(od.RequestName) )
FROM restable r WITH (NOLOCK)
JOIN pestable p WITH (NOLOCK) ON p.ResourceId = r.ResourceId
JOIN odtable od ON od.ResourceCode = p.ResourceCode
解决方案
正如其他朋友提到的,你不能用一个变量来做到这一点。但是你应该使用临时表来方便。
您可以仅为您的基本要求创建一个临时表,以便在任何地方重复使用它。然后,您可以稍后将其删除。我的意思是,您可以将您的要求组合在一个临时表中。或者针对不同要求的不同表格。然后您可以加入其他表。
我使用 Northwind db 更清晰。首先,创建一个临时表。
create table #temp(
CategoryId int
,name nvarchar(50)
,length int
/*columns for your requirements*/)
然后,你用你需要的东西substring(), len()
或其他功能来加载它。
insert into #temp
select
prod.CategoryID
,substring(prod.ProductName,1,3) as name
,len(prod.ProductName) as length
from Products as prod
/*join to different tables too*/
毕竟,您可以随心所欲地使用它。
select
t.*
,c.CategoryName
from Categories as c
inner join #temp as t on c.CategoryID = t.CategoryId
将这些更改为您的案例。
推荐阅读
- google-cloud-platform - 无法在 GCP 上启动实例
- mysql - 查询解决方案
- javascript - JavaScript + 火力基地。如何使用 fetch for farebase 实现请求,以便删除 farebase 中的项目
- python - AWS Lambda 函数可以直接使用 s3 上的文件还是需要移动到 /tmp/?
- django - 无法将matplot图连接到Django中的数据库
- sql - 我们可以在sql中的变量中设置多个值吗
- ansible - ansible yum list 的区别?
- apache - 修复 https://www 重定向后,CGI 脚本不再可用
- java - 设置长度时如何在StringBuilder中添加空格而不是null?
- vim - 在 Vimscript 中,如何从列表中跳过解构赋值中的元素?