Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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使用where选择多列到多个变量_Sql_Sql Server 2008 - Fatal编程技术网

SQL使用where选择多列到多个变量

SQL使用where选择多列到多个变量,sql,sql-server-2008,Sql,Sql Server 2008,我有一个简单的表格如下 CREATE TABLE [accounting].[ExtractControl]( [SourceSchema] [varchar](50) NOT NULL, [SourceTable] [varchar](150) NOT NULL, [SourceDatabase] [varchar](50) NOT NULL) Select @s1 = SourceDatabase from accounting.ExtractControl whe

我有一个简单的表格如下

CREATE TABLE [accounting].[ExtractControl](
    [SourceSchema] [varchar](50) NOT NULL,
    [SourceTable] [varchar](150) NOT NULL,
    [SourceDatabase] [varchar](50) NOT NULL)
Select @s1 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'xxx' and SourceTable = 'xxx'
Select @s2 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'yyy' and SourceTable = 'yyy'
Select @s3 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'xxx' and SourceTable = 'yyy'
我想使用SourceSchema和SourceTable值选择SourceDatabase

目前我正在处理多个查询,如下所示

CREATE TABLE [accounting].[ExtractControl](
    [SourceSchema] [varchar](50) NOT NULL,
    [SourceTable] [varchar](150) NOT NULL,
    [SourceDatabase] [varchar](50) NOT NULL)
Select @s1 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'xxx' and SourceTable = 'xxx'
Select @s2 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'yyy' and SourceTable = 'yyy'
Select @s3 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'xxx' and SourceTable = 'yyy'

我相信这可以用更优雅的方式来实现!谢谢你的帮助

你想要这样的东西吗

select SourceDatabase from accounting.ExtractControl
where SourceSchema in ('xxx', 'yyy') and SourceTable in ('xxx', 'yyy');
这将返回
SourceDatabase
,其中
SourceSchema
为“xxx”或“yyy”,而
SourceTable
为“xxx”或“yyy”。

带有一个查询选项

select * from accounting.ExtractControl
where SourceSchema = 'xxx' or SourceSchema = 'yyy'
SELECT @s1 = MAX(CASE WHEN SourceSchema = 'xxx' and SourceTable = 'xxx' THEN SourceDatabase END),
       @s2 = MAX(CASE WHEN SourceSchema = 'yyy' and SourceTable = 'yyy' THEN SourceDatabase END),
       @s3 = MAX(CASE WHEN SourceSchema = 'xxx' and SourceTable = 'yyy' THEN SourceDatabase END)
FROM accounting.ExtractControl

演示

此查询如何

select SourceDatabase
from accounting.ExtractControl
where SourceSchema in ('xxx', 'yyy')
      and SourceTable in ('xxx', 'yyy')
      and SourceTable = SourceSchema

我没有试过,但我认为这是您所需要的

您发现当前解决方案有什么不完美之处?@DanielHilgarth我正在查询数据库3次,以返回3个变量,我在想,也许可以使用一个对Db的查询返回所有3个变量。嗨,Daniel,它确实会返回SourceDatabase,但我希望它们存储在不同的变量中,具体取决于例如的SourceSchema和SourceTable。s1应该是当SourceSchema和SourceTable都是“xxx”时s2->当两者都是“yyy”时。。。如果您确实需要三个不同的变量,请使用当前的解决方案。@dopplesoldner:同意Daniel:如果您希望三个结果包含三个不同的变量,请使用当前的解决方案。但是,如果您详细说明如何准确地使用这些变量,可能会有更好的方法(也可能没有)。您好,Mert,我希望它们存储在不同的变量中,具体取决于例如的SourceSchema和SourceTable。s1应该是当SourceSchema和SourceTable都是“xxx”时s2->当两者都是“yyy”时。。。我不认为有更好的办法。您可以在代码中选择like this和linq。如果您希望每个单元格的值都是不同的变量,那么现在就使用游标