我有以下情况:
存储过程中的输入参数是数据库名称。所以,依赖于这个参数查询是在不同的数据库上执行的。每个查询都相同,下面只是简单的例子。
如何编写存储过程(使用动态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
答案 0 :(得分: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