在SQL Sever中将表列值提取到varchar中

时间:2017-07-05 20:39:48

标签: sql sql-server

我有

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true"
        android:state_pressed="true" android:drawable="@color/charcoal_dark" />
    <item android:state_enabled="true"
        android:state_focused="false" android:drawable="@color/charcoal_dark" />
    <item android:drawable="@color/black"/>
</selector>

我的存储过程中的查询如下所示,在我的程序中被调用超过10次。

tableA (strX varchar(10), strY varchar(10))
Values ('Me', 'Today')
       ('You', 'Yesterday')

tableB (strP varchar(10), strQ varchar(10))
Values ('He', 'Rejected')
       ('Me', 'Accepted')
       ('You', 'Rejected')
       ('Her', 'Accepted')

有没有办法可以将tableA中的strX存储到一个变量中并像下面一样使用它?

Select * from tableB  Where strp in (Select strX from tableA);

Declare @strValues = (Select strX from tableA); Select * from tableB Where strp in @strValues; strX的所有条目都不是动态的。

3 个答案:

答案 0 :(得分:0)

为什么你会费心尝试将工作查询转换为其他东西?

如果您关心性能,那么只需将strX作为主键:

create tableA (
    strX varchar(10) primary key,
    strY varchar(10)
);

这应该非常快。

答案 1 :(得分:0)

不要贬低其他人在这里所说的内容,但我认为下面的表变量在技术上是你所要求的:

mMaterial = iShield.GetComponent<Renderer>().material;

我怀疑这会是一种改进,但会为它的价值提供它。

答案 2 :(得分:0)

您可以使用strX值创建临时表 并使用主键进行索引。

在名称中添加#使其成为临时表 断开会话后会自动删除。

create table #tmpX (strX varchar(10) primary key);

然后将TableA中的strX值插入该值。

insert into #tmpX (strX)
select strX from TableA;

然后在查询中使用该临时表。

你可以使用IN 而且,INNER JOIN或EXISTS

select b.* 
from tableB b
inner join #tmpX a on (a.strX = b.strP);

select * 
from tableB b
where exists (
    select 1 
    from #tmpX a 
    where a.strX = b.strP
);

无论如何,在tableB.strP上添加索引可能也有助于加快它的速度。