0

我有以下情况:

存储过程中的输入参数是数据库名称。所以,取决于这个参数查询是在不同的数据库上执行的。每个查询都是一样的,下面只是简单的例子。

如何编写存储过程(使用动态 sql 除外)以避免 IF...ELSE 语句,如下面的代码。

ALTER PROCEDURE [dbo].[usp_Item_GetAll]
(
    @DBName nvarchar(255) = ''  
)
AS
BEGIN

IF @DBName = 'ItemUsers'
BEGIN
    SELECT
    *
    FROM ItemUsers.dbo.vW_DAM_ItemWithAttribute
END

ELSE IF @DBName = 'CollectionUsers'
BEGIN
    SELECT
        *
    FROM CollectionUsers.dbo.vW_DAM_ItemWithAttribute
END
4

1 回答 1

0

您可以创建一个包含动态查询以及数据库名称的字符串,然后使用EXEC类似这样的命令执行该查询

ALTER PROCEDURE [dbo].[usp_Item_GetAll]
(
    @DBName nvarchar(255) = ''  
)
AS
BEGIN

DECLARE @SQL varchar(MAX)
SET @SQL='SELECT * FROM ['+@DBName+'].dbo.[vW_DAM_ItemWithAttribute]'
EXEC(@SQL)
END
于 2013-07-02T21:02:17.773 回答