我正在尝试执行select语句,并将其中一个返回的变量用于另一个将返回的select语句。
查询基于field_id = 413进行搜索。
我需要返回6,以便可以在查询中使用它来获取具有该item_id的所有6行。
这就是我所拥有的:
DECLARE @Results TABLE(result sysname);
INSERT @Results(result);
DECLARE @SQL4 NVARCHAR(MAX) = 'Select DISTINCT ITEM_ID, ATRR_VAL from [dbo].[CONTRACT_ATTR] WHERE [ATTR_VAL] LIKE ''%@VALUE%'' AND FIELD_ID = 413 ORDER BY [ATTR_VAL]';
SET @SQL4 = replace(@SQL4, '@VALUE', '123456');
EXEC SP_executesql @SQL4;
SELECT * FR0M @Results
即使尝试按照在线教程,我也会收到多个错误。我做错了什么,如何解决?
编辑:我越来越近了:declare @myTable table
(
ITEM_ID nvarchar(256),
ATTR_VAL nvarchar(256)
)
insert into @myTable
exec (N'Select ITEM_ID, ATTR_VAL from [dbo].[CONTRACT_ATTR] WHERE [ATTR_VAL] LIKE ''%123%'' AND FIELD_ID = 413 ORDER BY [ATTR_VAL]') --dynamic query
select * from @myTable
答案 0 :(得分:3)
你想做这样的事吗?
选择func checkIfFileExist() {
let s3 = AWSS3.defaultS3()
let headObjectsRequest = AWSS3HeadObjectRequest()
headObjectsRequest.bucket = "YourBucketName" //Don't add "/" at end of your bucket Name
headObjectsRequest.key = "YourFileNameYouWantToCheckFor" //Don't add "/" in start of file name
s3.headObject(headObjectsRequest).continueWithBlock { (task) -> AnyObject! in
if let error = task.error {
print("Error to find file: \(error)")
} else {
print("fileExist")
}
}
}
的{{1}}的所有行,item
attr_val
为@value
413:
field_id
万一你不知道:
使用前导通配符的搜索条件将导致索引扫描而不是索引搜索(几乎总是较慢,除非它们正在执行相同的工作)。这被称为非SARGable。 SARGable是Search ARGument Able的简称。
如果您可以更改为使用select ca.*
from dbo.contract_attr as ca
where exists (
select 1
from dbo.contract_attr as i
where i.field_id = 413
and i.attr_val like '%'+@value+'%'
and i.item_id = ca.item_id
)
,它将变为SARGable,并且可以利用该列上存在的索引来执行索引搜索。
答案 1 :(得分:1)
发布的代码有几个问题:
INSERT
语句应包含在动态sql部分中。 @Results
表格的大小不足以容纳您要插入的数据。您可以使用临时表。请尝试以下代码:
CREATE TABLE #Results TABLE(ID int, result nvarchar(128) NOT NULL);
DECLARE @SQL4 NVARCHAR(MAX) = 'INSERT INTO #Results(ID, result)
Select DISTINCT ITEM_ID, ATRR_VAL
from [dbo].[CONTRACT_ATTR]
WHERE [ATTR_VAL] LIKE ''%@VALUE%'' AND
FIELD_ID = 413';
SET @SQL4 = replace(@SQL4, '@VALUE', '123456');
EXEC SP_executesql @SQL4;
SELECT * FR0M #Results ORDER BY [result];