SQL SERVER 存储过程中如何使用传入的DB参数,实现跨库查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER 存储过程中如何使用传入的DB参数,实现跨库查询?相关的知识,希望对你有一定的参考价值。

U8系统外开发的内容比较多,为了不混,将开发的内容加在了另一个库中。但是,U8每年会生成一个账套,所以,新开发的库中的视图,存储过程,则需要每年去修改其中的u8的数据库名称,现在不知是否有更好的办法,不需要每年都去修改。

你可以建立一个公用的数据库,里面就一张表,是U8历次的数据库名,然后用一个公用的方法去返回最新的数据库句,这后你的视图和存储过程就用这个方法来返回数据库名进行更新就行了。 参考技术A sqlserver存储过程跨库insert操作并带有参

如何在 SQL Server 中使用单引号?

【中文标题】如何在 SQL Server 中使用单引号?【英文标题】:How to use single quote in SQL Server? 【发布时间】:2013-10-17 16:11:48 【问题描述】:

我通过使用检索客户信息

WHERE UPPER(CustomerName) LIKE UPPER('%ALAN%');

现在,当我创建一个新的存储过程时,我想传入一个变量@CustomerName。所以,我像这样改变了我的查询:

DECLARE @CustomerName Nvarchar(100);
SET @CustomerName = 'ALAN';

WHERE UPPER(CustomerName) LIKE UPPER(''%'' + @CustomerName + ''%'');

但是,我收到以下错误:

数据类型 varchar 和 varchar 在取模运算符中不兼容。

我怀疑是因为我用错了单引号。如何更新我的查询以获得结果?

【问题讨论】:

【参考方案1】:

应该就是下面那个。您将字符串文字与变量值连接起来,您不需要做任何特殊的事情。

DECLARE @CustomerName Nvarchar(100);
SET @CustomerName = 'ALAN';

WHERE UPPER(CustomerName) LIKE UPPER('%' + @CustomerName + '%');

注意,你没有包含 SELECT 部分,所以我也没有包含它。

【讨论】:

【参考方案2】:

您的查询中有多余的引号,删除它 =)

DECLARE @CustomerName Nvarchar(100);
SET @CustomerName = 'ALAN';

WHERE UPPER(CustomerName) LIKE UPPER('%' + @CustomerName + '%');

示例:http://sqlfiddle.com/#!6/c5424/5

【讨论】:

以上是关于SQL SERVER 存储过程中如何使用传入的DB参数,实现跨库查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何把DB2的数据直接导入SQL server中

初识 Sql Server存储过程

使用传入的字符串列表结合 SQL Server 存储过程 WITH LOCK 和 INNER JOIN

SQL SERVER2008 存储过程表视图函数的权限

带参数的ms sql server的扩展存储过程,怎么传递参数

sql server 查询db中都有哪些地方调用了某个sp