使用where条件从交叉数据库中获取数据时的SQL查询问题 [英] SQL Query problem in fetching data from cross DataBase using where condition

查看:142
本文介绍了使用where条件从交叉数据库中获取数据时的SQL查询问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我在从其他数据库中获取数据时遇到问题。

我有2个数据库



1.BankingDB

2.MarketingDB


这2 DB中的
我有一个相同的表MembersTB

即在银行业我有表MembersTB,我在MarketingDB中也有表MembersTB也有相同的列名。



现在我需要显示从两个DataBase中的StartDate到EndDate的成员记录。我需要附加两个表,所以我在银行表中写入查询。对于银行业务表选择查询不是问题,但我在从另一个数据库(MarketingDB)获取数据时遇到问题。



银行查询(好)

Hello every one ,
I am having problem in fetching data data from another Data base .
I am having 2 data base

1.BankingDB
2.MarketingDB

in this 2 DB i am having a same table MembersTB
i.e in banking i am having table MembersTB an also i am having table MembersTB in MarketingDB also with same column names .

Now i need to display the members record from StartDate to EndDate from both DataBase . I need to append both table from so i am writing query in banking table . For banking table select query is not a problem but i am facing problem in fetching data form another DB(MarketingDB).

Banking Query (Good)

SELECT    MemberShipTB.AppNo,  MemberShipTB.MemberID, MemberShipTB.Name, MemberShipTB.ReceiptNo,				((MemberShareTb.ShareAmt*MemberShareTb.No_of_Shares)+MemberShareTb.AdminAmt+MemberShareTb.EntranceAmt),MemberShipTB.DOJ		         	FROM AmulyaBankingMarket.dbo. MemberShipTB INNER JOIN AmulyaBankingMarket.dbo.
                 MemberShareTb ON AmulyaBankingMarket.dbo. MemberShipTB.MemberID = AmulyaBankingMarket.dbo.MemberShareTb.MemberID where   MemberShipTB.DOJ between '12/1/2012 12:00:00 am' and '2/19/2013 11:59:59 pm' 





因为我需要从另一个表中获取数据,我需要用这种格式写入







since I need to fetch data from another table I need to write in this format


  declare @QueryExecution varchar(1000),@CrossDBname varchar(500),@StartDate Datetime,@EndDate datetime 


   set @StartDate='12/1/2012 12:00:00 am' 
  set @EndDate='2/19/2013 11:59:59 pm'


declare @QueryExecution varchar(500),@CrossDBname varchar(40)
   execute @CrossDBname='MarketingDB.dbo.'


set @QueryExecution= 'SELECT    MemberShipTB.AppNo,  MemberShipTB.MemberID, MemberShipTB.Name, MemberShipTB.ReceiptNo,((MemberShareTb.ShareAmt*MemberShareTb.No_of_Shares)+MemberShareTb.AdminAmt+MemberShareTb.EntranceAmt),MemberShipTB.DOJ       			FROM '+@CrossDBname+' MemberShipTB INNER JOIN '+@CrossDBname+'							 MemberShareTb ON '+@CrossDBname+' MemberShipTB.MemberID = '+@CrossDBname+'MemberShareTb.MemberID where (MemberShipTB.DOJ between '+@startDate+' and '+  @endDate+')'				
 execute(@QueryExecution)



这里我指定数据库名称以便从其他数据库中获取数据。



但它显示的错误是这样的

Msg 241,Level 16,State 1,Line 10

转换失败时从字符串转换日期和/或时间。



这里的MemberShipTB.DOJ是表格中的DateTime列。

所以我的事情是@startDate和@endDate被视为字符串而不是DateTime所以任何人都可以建议这个问题。



先谢谢


Here i am specifying DB name in order to fetch data from other DB .

But it is showing error like this
"Msg 241, Level 16, State 1, Line 10
Conversion failed when converting date and/or time from character string."

here MemberShipTB.DOJ is a DateTime column in Table .
so i thing the @startDate and @endDate is been treated as string than DateTime so can anyone suggest for this problem.

Thanks in Advance

推荐答案

将你的变量声明为datetime,并将其声明为varchar

,因为我已在下面声明并在你的代码中使用



----------------------



Insted of declaring your variable as datetime declare it as varchar
as i have declared below and used in your code

----------------------

declare @QueryExecution varchar(1000),@CrossDBname varchar(500),@StartDate varchar(10),@EndDate varchar(10)

  set @StartDate='2013-01-01' 
  set @EndDate='2013-01-31'



declare @QueryExecution varchar(500),@CrossDBname varchar(40)
   execute @CrossDBname='MarketingDB.dbo.'
 

set @QueryExecution= 'SELECT    MemberShipTB.AppNo,  MemberShipTB.MemberID, MemberShipTB.Name, MemberShipTB.ReceiptNo,((MemberShareTb.ShareAmt*MemberShareTb.No_of_Shares)+MemberShareTb.AdminAmt+MemberShareTb.EntranceAmt),MemberShipTB.DOJ       			FROM '+@CrossDBname+' MemberShipTB INNER JOIN '+@CrossDBname+'							 MemberShareTb ON '+@CrossDBname+' MemberShipTB.MemberID = '+@CrossDBname+'MemberShareTb.MemberID where (convert(varchar(10),MemberShipTB.DOJ,121)) between convert(varchar(10),'+@startDate+',121) and convert(varchar(10),'+@endDate+',121)'			
 execute(@QueryExecution)



I hope it will help you

Note: i have not tested this code on my server ,sorry if it does not work.


只需附加一个单词' ''''并将其转换为varchar

这里是答案



just need to append a single quot '''''' and convert it to varchar
here is the answer

'SELECT    MemberShipTB.AppNo,  MemberShipTB.MemberID, MemberShipTB.Name, MemberShipTB.ReceiptNo,((MemberShareTb.ShareAmt*MemberShareTb.No_of_Shares)+MemberShareTb.AdminAmt+MemberShareTb.EntranceAmt),MemberShipTB.DOJ
                            FROM '+@CrossDBname+' MemberShipTB INNER JOIN '+@CrossDBname+'
                             MemberShareTb ON '+@CrossDBname+' MemberShipTB.MemberID = '+@CrossDBname+'MemberShareTb.MemberID where (MemberShipTB.DOJ between '''+convert(varchar(30),@startDate)+''' and '''+ convert(varchar(30),@endDate)+''')'


这篇关于使用where条件从交叉数据库中获取数据时的SQL查询问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆