SqlServer 连接字串不使用数据库名 实现跨库查询
2017-10-21 14:43
567 查看
此次运用需要在同一服务器下,在一个库中SQL查询一组数据,作为参数提交到一个另一个库的函数中进行计算,以前没玩过,问了下度娘,未得到可用结果,遂根据查到的零星信息猜想,取消连接字串里面的库名称试试能不能同时操作多个库,经测试,顺利一次通过运行成功!详见以下代码(以ASP为例):
Set conn = Server.CreateObject("ADODB.Connection")
SET Rs = Server.CreateObject("ADODB.Recordset")
connstr= "Provider=SQLoledb;data source=.;UID=sa;PWD=youpassword;" '不使用Initial Catalog=DBname"
conn.Open connstr
sql="SELECT * FROM [DBname].[dbo].[TableName] where StationCode ='条件' "
rs.Open sql, conn ,1
If Rs.eof And Rs.bof Then
Response.write "查询 数据错误!"
SID=""
else
Response.write "SO2:" & rs.Fields("SO2").value & "
"
end if
CloseDB 2
sql="DECLARE @SO2_data decimal(20,10),@NO2_data decimal(20,10),@PM10_data decimal(20,10),@CO_data decimal(20,10),@O3_1h_data decimal(20,10),@O3_8h_data decimal(20,10),@PM25_data decimal(20,10),@des varchar(100),@PrimaryPollutant varchar(30),@AQI varchar(10);SELECT @CO_data=convert(decimal(20,10),[CO_24h]),@NO2_data=convert(decimal(20,10),[NO2_24h]),@O3_1h_data=convert(decimal(20,10),[O3_24h]),@O3_8h_data=convert(decimal(20,10),[O3_8h]),@PM10_data=convert(decimal(20,10),[PM10_24h]),@PM25_data=convert(decimal(20,10),[PM2_5_24h]),@SO2_data=convert(decimal(20,10),[SO2_24h]) FROM [ProvincePublishV2].[dbo].[AQIDataPublishLive] where StationCode ='1004A';set @des='PrimaryPollutant';SELECT @PrimaryPollutant=[EnvDataProvince].[dbo].[fn_AQI_Publish] (@SO2_data,@NO2_data,@PM10_data,@CO_data,@O3_1h_data,@O3_8h_data,@PM25_data,@des);set @des='AQI';SELECT @AQI=[EnvDataProvince].[dbo].[fn_AQI_Publish] (@SO2_data,@NO2_data,@PM10_data,@CO_data,@O3_1h_data,@O3_8h_data,@PM25_data,@des);SELECT @PrimaryPollutant as 'PrimaryPollutant' ,@AQI as 'AQI';"
rs.Open sql, conn ,1
If Rs.eof And Rs.bof Then
Response.write "查询AQI错误!"
SID=""
else
Response.write "PrimaryPollutant:" & rs.Fields("PrimaryPollutant").value & ", AQI:" & rs.Fields("AQI").value
end if
CloseDB 1
'----附关闭数据连接子程序--------------------------------
Public Sub CloseDB(allClose)
'1 ,AllClose & Nothing
'0 ,AllClose
'2 ,RS Close
'3 ,RS Close & Nothing
On Error Resume Next
If allClose = 1 Then
If Not RS Is Nothing Then
If RS.State = 1 Then RS.Close
Set RS = Nothing '----------------
End If
If Not conn Is Nothing Then
If conn.State = 1 Then conn.Close
Set conn = Nothing '---------------------
End If
ElseIf allClose = 0 Then
If Not RS Is Nothing Then
If RS.State = 1 Then RS.Close
End If
If Not conn Is Nothing Then
If conn.State = 1 Then conn.Close
End If
ElseIf allClose = 2 Then
If Not RS Is Nothing Then
If RS.State = 1 Then RS.Close
End If
ElseIf allClose = 3 Then
If Not RS Is Nothing Then
If RS.State = 1 Then RS.Close
Set RS = Nothing '--------------
End If
End If
'Response.write "function1 CONN closeed!"
End Sub
里面的 DBname 即为正常连接时需要写在 Initial Catalog= 的库名,这里不写库名的话,在SQL语句中就必须带上库名加上[dbo] 标识再加上表名称来定位到数据表,切记!
即 [DBname].[dbo].[TableName]
这样,更换了 DBname 后 就可以实现在多个库之间自由查询了。
此记.
Set conn = Server.CreateObject("ADODB.Connection")
SET Rs = Server.CreateObject("ADODB.Recordset")
connstr= "Provider=SQLoledb;data source=.;UID=sa;PWD=youpassword;" '不使用Initial Catalog=DBname"
conn.Open connstr
sql="SELECT * FROM [DBname].[dbo].[TableName] where StationCode ='条件' "
rs.Open sql, conn ,1
If Rs.eof And Rs.bof Then
Response.write "查询 数据错误!"
SID=""
else
Response.write "SO2:" & rs.Fields("SO2").value & "
"
end if
CloseDB 2
sql="DECLARE @SO2_data decimal(20,10),@NO2_data decimal(20,10),@PM10_data decimal(20,10),@CO_data decimal(20,10),@O3_1h_data decimal(20,10),@O3_8h_data decimal(20,10),@PM25_data decimal(20,10),@des varchar(100),@PrimaryPollutant varchar(30),@AQI varchar(10);SELECT @CO_data=convert(decimal(20,10),[CO_24h]),@NO2_data=convert(decimal(20,10),[NO2_24h]),@O3_1h_data=convert(decimal(20,10),[O3_24h]),@O3_8h_data=convert(decimal(20,10),[O3_8h]),@PM10_data=convert(decimal(20,10),[PM10_24h]),@PM25_data=convert(decimal(20,10),[PM2_5_24h]),@SO2_data=convert(decimal(20,10),[SO2_24h]) FROM [ProvincePublishV2].[dbo].[AQIDataPublishLive] where StationCode ='1004A';set @des='PrimaryPollutant';SELECT @PrimaryPollutant=[EnvDataProvince].[dbo].[fn_AQI_Publish] (@SO2_data,@NO2_data,@PM10_data,@CO_data,@O3_1h_data,@O3_8h_data,@PM25_data,@des);set @des='AQI';SELECT @AQI=[EnvDataProvince].[dbo].[fn_AQI_Publish] (@SO2_data,@NO2_data,@PM10_data,@CO_data,@O3_1h_data,@O3_8h_data,@PM25_data,@des);SELECT @PrimaryPollutant as 'PrimaryPollutant' ,@AQI as 'AQI';"
rs.Open sql, conn ,1
If Rs.eof And Rs.bof Then
Response.write "查询AQI错误!"
SID=""
else
Response.write "PrimaryPollutant:" & rs.Fields("PrimaryPollutant").value & ", AQI:" & rs.Fields("AQI").value
end if
CloseDB 1
'----附关闭数据连接子程序--------------------------------
Public Sub CloseDB(allClose)
'1 ,AllClose & Nothing
'0 ,AllClose
'2 ,RS Close
'3 ,RS Close & Nothing
On Error Resume Next
If allClose = 1 Then
If Not RS Is Nothing Then
If RS.State = 1 Then RS.Close
Set RS = Nothing '----------------
End If
If Not conn Is Nothing Then
If conn.State = 1 Then conn.Close
Set conn = Nothing '---------------------
End If
ElseIf allClose = 0 Then
If Not RS Is Nothing Then
If RS.State = 1 Then RS.Close
End If
If Not conn Is Nothing Then
If conn.State = 1 Then conn.Close
End If
ElseIf allClose = 2 Then
If Not RS Is Nothing Then
If RS.State = 1 Then RS.Close
End If
ElseIf allClose = 3 Then
If Not RS Is Nothing Then
If RS.State = 1 Then RS.Close
Set RS = Nothing '--------------
End If
End If
'Response.write "function1 CONN closeed!"
End Sub
里面的 DBname 即为正常连接时需要写在 Initial Catalog= 的库名,这里不写库名的话,在SQL语句中就必须带上库名加上[dbo] 标识再加上表名称来定位到数据表,切记!
即 [DBname].[dbo].[TableName]
这样,更换了 DBname 后 就可以实现在多个库之间自由查询了。
此记.
相关文章推荐
- 使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
- 使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
- 利用javabean轻松实现对数据库的连接、查询以及增删改!------使用范例
- SqlServer 中使用Jtds驱动连接数据库,如果字段类型为ntext,可能查询输出的为Object: net.sourceforge.jtds.jdbc.ClobImpl@66fa192
- SqlServer 连接远程服务器数据库 实现跨服务器联合查询
- 使用TransactionScope实现多数据库连接事务操作
- 使用inner join实现多表连接查询
- 数据库连接查询 sqlserver 2000
- asterisk 使用php脚本连接oralce数据库 通过AMI端口实现预拨号(批量外呼)
- Oracle&SQLServer中实现跨库查询
- 使用SQLServer代理实现定时清除数据库日志
- 不同服务器不同数据库两张表连接查询使用经验 数据库基础教程
- 访问远程Access数据库,使用SqlServer 2005的连接服务器实现
- 使用TransactionScope实现多数据库连接事务操作
- 牛腩购物15:中国省市县数据库,DropDownList 绑定数据库 下拉选择省市,购物车的实现,使用sqlserver 2008 导入access数据库,不能在 DropDownList 中选择多个项
- C#访问数据库使用web.config配置连接字串
- VS使用可视化组件连接并查询数据库(一)
- 使用inner join实现多表连接查询
- 通过VS中的数据源选择对话框实现数据库连接配置(用户使用)
- 查询数据库的数据,是个比较费时的工作,在使用线程查询的时候显示个进度条,并允许终止查询的实现