首页 > 解决方案 > 如何在视图中使用参数

问题描述

我尝试使用参数将值分配给视图,但出现错误:

'ALTER VIEW' 必须是查询批处理中的第一条语句。

使用 GO 语句时,无法访问变量。

如何将参数分配给视图。

USE [DBNAME]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

DECLARE @CA_Removal varchar(max)
SET @CA_Removal=(SELECT value FROM spider.Configuration WHERE id='Removal')
GO

ALTER view [spider3].[View] WITH SCHEMABINDING
as
select
asa.id,
ase.common,
from
[spider].Activity asa
inner join
[spider].External ase
on
asa.primaryKey = ase.owner
where
asa.type = TRY_CONVERT(int, @CA_Removal)

asa.type = 10它正常工作时。

标签: sqlsql-servertsql

解决方案


你不想要一个视图。你想要一个表值函数:

create function spider3.udf_spider (
    @CA_Removal varchar(max)
) returns table
as return(select asa.id, ase.common
           from [spider].Activity asa join
                [spider].External ase
                on asa.primaryKey = ase.owner
           where asa.type = TRY_CONVERT(int, @CA_Removal)
          );

传入一个您只需转换为整数的字符串似乎真的很尴尬。我强烈建议您将值作为整数传递:

create function spider3.udf_spider (
    @CA_Removal int
) returns table
as return(select asa.id, ase.common
           from [spider].Activity asa join
                [spider].External ase
                on asa.primaryKey = ase.owner
           where asa.type = @CA_Removal
          );

推荐阅读