【问题标题】:SQL: How Do you Declare multiple paramaters as one?SQL:如何将多个参数声明为一个?
【发布时间】:2015-01-15 13:17:40
【问题描述】:
I am attempting to do the following


 1. Link two tables via a join on the same database
 2. Take a column that exists in both FK_APPLICATIONID(with a slight difference, 
    where one = +1 of the other I.e. Column 1 =1375 and column 2 = 1376
 3. In one of the tables exist a reference number (QREF1234) and the other
       contains 11 phonenumbers
 4. I want to be able to enter the Reference number, and it returns all 11
       phonenumbers as a single declarable value.
 5. use "Select * from TableD where phonenum in (@Declared variable)

这是我目前所拥有的,

Use Database 1

DECLARE @Result INT;

SELECT @Result = D.PhoneNum1, 

FROM Table1 

JOIN  TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID

where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
and QREF = 'Q045569/2'
Use Database2

Select * from Table3 where PhoneNum = '@result'

我向以下不理解我想要达到的目标的人道歉,我希望这能解决问题。

谢谢

【问题讨论】:

  • 你的JOIN DB1.Table2 D on D.FK_ApplicationID= D.FK_ApplicationID 是错误的。连接的两边是相同的。
  • 您的代码毫无意义。它使用未定义的别名(例如 db1)和无意义的比较(例如 D.FK_ApplicationID = D.FK_ApplicationID)。修复您的查询。此外,添加示例数据和所需结果。
  • 为什么不在一个查询中引用表?语法类似于 Select * from MyDB1.dbo.TableA where PhoneNumber1 in (Select PhoneNumber1 from MyDB2.dbo.TableB)
  • 所以您的表结构包含字段Phonenum1、Phonenum2、Phonenum3、...、Phonenum11,并且您想将电话号码与这些字段中的任何一个匹配?跨度>
  • 我完全不明白你的最终目标声明。

标签: sql sql-server variables declare


【解决方案1】:

有几种选择,但最佳答案取决于您真正想要实现的目标。

有一个 SQL 技巧,例如,您可以将值连接到变量中;

create table dbo.t (i int, s varchar(10))
insert dbo.t values (1, 'one')
insert dbo.t values (2, 'two')
insert dbo.t values (3, 'three')
go

declare @s varchar(255)

select @s = isnull(@s + ', ', '') + s from t order by i
select @s

set @s = null
select @s = isnull(@s + ', ', '') + s from t order by i desc
select @s

或者,如果您只想要一个值,则可以使用 TOP 关键字,例如;

select top 1 @s = s from t order by i 
select @s

select top 1 @s = s from t order by i desc
select @s

或者,您可以使用三部分命名并跨数据库连接,例如;

SELECT T.*
FROM   DB1.dbo.Table1
       JOIN DB1.dbo.Table2 D
         ON D.FK_ApplicationID = D.FK_ApplicationID
       JOIN DB2.dbo.Table T
         ON T.PhoneNum = RIGHT(D.PhoneNum1, 11)
WHERE  DB1.dbo.FK_ApplicationID = D.dbo.FK_ApplicationID + 1
       AND Hidden = 'VALUE'

希望这会有所帮助,

里斯

【讨论】:

  • 说实话,我很茫然,我不明白这对我有什么帮助,我很抱歉。
  • @Denslat - 你试过运行我的第三个例子吗?您将需要更改对象名称以反映它们的真实情况,但它应该为您提供您想要的。如果它不起作用,为什么不呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2014-03-24
  • 2018-10-08
相关资源
最近更新 更多