请问在SQLserver 中如何指定一个数据库类型的变量?就是说里面引用的表前的数据库前缀可以像变量一样改变

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问在SQLserver 中如何指定一个数据库类型的变量?就是说里面引用的表前的数据库前缀可以像变量一样改变相关的知识,希望对你有一定的参考价值。

insert into @tp1(ptypeid1,ktypeid1,qty1,total1)
select i.ptypeid,i.ktypeid,sum(isnull(i.qty,0)) qty,sum(isnull(i.costtotal,0)) total
from @A.[dbo].billindex b,@A.[dbo].inoutstocktable i
where b.billdate=@newday and redword=0 and draft=0 and b.billnumberid=i.billnumberid
group by i.ptypeid,i.ktypeid

比如上边代码中@A那样的表达形式
因为程序内部总要引用一个外部数据库,为了好修改所以想在开始的地方统一设置外部数据库的名称,都是在一台服务器上的。

参考技术A 如果仅仅是 为了 指向一个 外部数据库, 使用 数据库 同义词, 来作这个事情就好了.

下面的例子,就是 Test2 数据库, 要访问 Test 数据库的一个表
默认的情况下,要 全名 Test.dbo.v_sale_report_sum
建立 同义词, 可以简化处理。

如果一定要按照楼主的那种处理方式, 那就只有用 动态SQL 来处理了。

1>
2> USE [Test2]
3> GO
已将数据库上下文更改为 'Test2'。

1> SELECT * FROM Test.dbo.v_sale_report_sum;
2> go
sale_item sale_money
--------- ----------------------------------------
A 733285.00
C 5738.00
B 2382.00

(3 行受影响)

1> SELECT * FROM v_sale_report_sum;
2> go
消息 208,级别 16,状态 1,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行
对象名 'v_sale_report_sum' 无效。

1> CREATE SYNONYM v_sale_report_sum
2> FOR Test.dbo.v_sale_report_sum;
3> go

1> SELECT * FROM v_sale_report_sum;
2> go
sale_item sale_money
--------- ----------------------------------------
A 733285.00
C 5738.00
B 2382.00

(3 行受影响)
参考技术B 这个写存储过程比较合适:
-------------------------------------------------------------------
create proc insert_date

@dbName varchar(100),--数据库名
@tableName varchar(100),--表名

as
declare @sql varchar(3000)
if @dbName =''
begin
set @dbName='varchar(100)'
end
要写什么自己写上。
set @sql= 这变量就是你那个SQL,把传入的@dbName 和 @tableName 跟写字符串拼接一样写进入就O了!
------------------------------
最后执行一下
exec(@sql)
-------------------------------
打完收工!!
---------------------------------
如果怕重新编译,就用with recompile选项,使用sql字符串变化不大的情况。

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela本回答被提问者采纳

以上是关于请问在SQLserver 中如何指定一个数据库类型的变量?就是说里面引用的表前的数据库前缀可以像变量一样改变的主要内容,如果未能解决你的问题,请参考以下文章

请问 asp.net(c#) 如何读取sqlserver表的字段名及数据类型?

SQLServer 请问怎么给指定DB建立登录用户?

如何把excel表导入sqlserver

SqlServer数据库中,日期的模糊查询

sqlserver中如何把数字转换成时间的格式?

(高分)附加数据库的时候出现"所指定的文件不是有效的SQL Server数据库文件"请问如何解决?