Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 TSQL使用表变量进行类似的比较,理想情况下无需迭代_Sql Server 2008_Tsql_Sql Server 2008 R2_Var_Sql Like - Fatal编程技术网

Sql server 2008 TSQL使用表变量进行类似的比较,理想情况下无需迭代

Sql server 2008 TSQL使用表变量进行类似的比较,理想情况下无需迭代,sql-server-2008,tsql,sql-server-2008-r2,var,sql-like,Sql Server 2008,Tsql,Sql Server 2008 R2,Var,Sql Like,发帖后, 我形成了一个varchar表变量,例如 Declare @myList_1(Id varchar(2)) Insert into @myList_1 Select id from (VALUES ('x1')) AS tbl(id) Insert into @myList_1 Select id from (VALUES ('x2')) AS tbl(id) Insert into @myList_1 Select id from (VALUES ('x3')) AS

发帖后,

我形成了一个varchar表变量,例如

    Declare @myList_1(Id varchar(2))
Insert into @myList_1
Select id from  (VALUES ('x1')) AS tbl(id)
Insert into @myList_1
Select id from  (VALUES ('x2')) AS tbl(id)
Insert into @myList_1
Select id from  (VALUES ('x3')) AS tbl(id)    
然而,我需要扩展这个概念,这样我就可以做一些事情,比如“相似的比较”

e、 g:

上图:SSMS 2008 r2出现错误:“必须声明标量变量@myList_1”


如果可能的话,我希望在不使用迭代器或循环构造的情况下执行此操作…

让我们假设以下测试数据和表结构

-- Create test table
CREATE TABLE [dbo].[myTable](
    [Id] [int] NOT NULL PRIMARY KEY,
    [myCol] [varchar](100) NULL)
GO

-- Insert test data
INSERT INTO myTable(Id, myCol)
VALUES (1, 'Bladder cancer'),
    (2, 'Lung cancer'),
    (3, 'Brain cancer'),
    (4, 'Melanoma'),
    (5, 'Breast cancer'),
    (6, 'Non-Hodgkin lymphoma'),
    (7, 'Cervical cancer'),
    (8, 'Ovarian cancer'),
    (9, 'Cardiovascular disease'),
    (10, 'Nerve damage'),
    (11, 'Kidney damage'),
    (12, 'Eye damage'),
    (13, 'Foot damage'),
    (14, 'Skin conditions'),
    (15, 'Alzheimer''s disease'),
    (16, 'Hearing impairment')
GO
现在,实际的SQL将基于使用表变量@myList_1连接要进行搜索的表

-- Create list of items to look for
Declare @myList_1 table(Id varchar(20))
Insert into @myList_1
Select id from  (VALUES ('cancer')) AS tbl(id)
Insert into @myList_1
Select id from  (VALUES ('Melanoma')) AS tbl(id)
Insert into @myList_1
Select id from  (VALUES ('lymphoma')) AS tbl(id)    

-- Do query
SELECT myTable.Id, myTable.myCol
FROM myTable
JOIN @myList_1 as ItemsList
ON myTable.myCol like '%' + ItemsList.Id + '%'
在这种简单的情况下,
mycl
可以只匹配
@myList_1
中的单个值,这应该足够了,但是对于
mycl
可以匹配
@myList_1
中多个值的情况,您应该向查询中添加
DISTINCT

-- Do query
SELECT DISTINCT myTable.Id, myTable.myCol
FROM myTable
JOIN @myList_1 as ItemsList
ON myTable.myCol like '%' + ItemsList.Id + '%'

你可以从这个问题中寻找灵感-
-- Do query
SELECT DISTINCT myTable.Id, myTable.myCol
FROM myTable
JOIN @myList_1 as ItemsList
ON myTable.myCol like '%' + ItemsList.Id + '%'