Pouvons-nous passer un paramètre à une vue dans Microsoft SQL Server?
J'ai essayé de create view
de la manière suivante, mais ça ne marche pas:
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
Pouvons-nous passer un paramètre à une vue dans Microsoft SQL Server?
J'ai essayé de create view
de la manière suivante, mais ça ne marche pas:
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
Il y a 2 façons de réaliser ce que vous voulez malheureusement, aucun des deux ne peut être fait à l'aide d'un point de vue.
Vous pouvez soit créer une table défini par l'utilisateur fonction qui prend le paramètre que vous voulez et retourne le résultat d'une requête
Ou vous pouvez faire à peu près la même chose, mais créer une procédure stockée à la place d'une fonction définie par l'utilisateur.
Par Exemple
la procédure stockée ressemblerait
CREATE PROCEDURE s_emp
(
@enoNumber INT
)
AS
SELECT
*
FROM
emp
WHERE
emp_id=@enoNumber
Ou de la fonction définie par l'utilisateur ressemblerait
CREATE FUNCTION u_emp
(
@enoNumber INT
)
RETURNS TABLE
AS
RETURN
(
SELECT
*
FROM
emp
WHERE
emp_id=@enoNumber
)
Non, vous ne pouvez pas, en tant que Mladen Prajdic dit. Pense que d'un point de vue comme un "filtre statique" sur une table ou une combinaison de tables. Par exemple: un point de vue peut combiner les tables Order
et Customer
afin de vous obtenir un nouveau "tableau" de lignes à partir d' Order
avec de nouvelles colonnes contenant le nom du client et le numéro de client (combinaison de tables). Ou vous pouvez créer une vue qui ne sélectionne que les non transformés, les ordres de l' Order
tableau (filtre statique).
Vous devez ensuite sélectionner à partir de la vue comme vous le feriez pour sélectionner à partir de n'importe quel autre "normal" de la table tous les "non-statique" filtrage doit être fait hors de la vue (comme "Obtenir toutes les commandes pour les clients du nom de Miller" ou "prendre les commandes non traitées qui sont venus dans le Dec 24").
nous pouvons écrire une procédure stockée avec des paramètres d'entrée, puis utiliser cette procédure stockée pour obtenir un résultat défini à partir de la vue. voir exemple ci-dessous.
la procédure stockée est
CREATE PROCEDURE [dbo].[sp_Report_LoginSuccess] -- [sp_Report_LoginSuccess] '01/01/2010','01/30/2010'
@fromDate datetime,
@toDate datetime,
@RoleName varchar(50),
@Success int
as
If @RoleName != 'All'
Begin
If @Success!=2
Begin
--fetch based on true or false
Select * from vw_Report_LoginSuccess
where logindatetime between dbo.DateFloor(@fromDate) and dbo.DateSieling(@toDate)
And RTrim(Upper(RoleName)) = RTrim(Upper(@RoleName)) and Success=@Success
End
Else
Begin
-- fetch all
Select * from vw_Report_LoginSuccess
where logindatetime between dbo.DateFloor(@fromDate) and dbo.DateSieling(@toDate)
And RTrim(Upper(RoleName)) = RTrim(Upper(@RoleName))
End
End
Else
Begin
If @Success!=2
Begin
Select * from vw_Report_LoginSuccess
where logindatetime between dbo.DateFloor(@fromDate) and dbo.DateSieling(@toDate)
and Success=@Success
End
Else
Begin
Select * from vw_Report_LoginSuccess
where logindatetime between dbo.DateFloor(@fromDate) and dbo.DateSieling(@toDate)
End
End
et la vue à partir de laquelle nous pouvons obtenir le jeu de résultats est
CREATE VIEW [dbo].[vw_Report_LoginSuccess]
AS
SELECT '3' AS UserDetailID, dbo.tblLoginStatusDetail.Success, CONVERT(varchar, dbo.tblLoginStatusDetail.LoginDateTime, 101) AS LoginDateTime,
CONVERT(varchar, dbo.tblLoginStatusDetail.LogoutDateTime, 101) AS LogoutDateTime, dbo.tblLoginStatusDetail.TokenID,
dbo.tblUserDetail.SubscriberID, dbo.aspnet_Roles.RoleId, dbo.aspnet_Roles.RoleName
FROM dbo.tblLoginStatusDetail INNER JOIN
dbo.tblUserDetail ON dbo.tblLoginStatusDetail.UserDetailID = dbo.tblUserDetail.UserDetailID INNER JOIN
dbo.aspnet_UsersInRoles ON dbo.tblUserDetail.UserID = dbo.aspnet_UsersInRoles.UserId INNER JOIN
dbo.aspnet_Roles ON dbo.aspnet_UsersInRoles.RoleId = dbo.aspnet_Roles.RoleId
WHERE (dbo.tblLoginStatusDetail.Success = 0)
UNION all
SELECT dbo.tblLoginStatusDetail.UserDetailID, dbo.tblLoginStatusDetail.Success, CONVERT(varchar, dbo.tblLoginStatusDetail.LoginDateTime, 101)
AS LoginDateTime, CONVERT(varchar, dbo.tblLoginStatusDetail.LogoutDateTime, 101) AS LogoutDateTime, dbo.tblLoginStatusDetail.TokenID,
dbo.tblUserDetail.SubscriberID, dbo.aspnet_Roles.RoleId, dbo.aspnet_Roles.RoleName
FROM dbo.tblLoginStatusDetail INNER JOIN
dbo.tblUserDetail ON dbo.tblLoginStatusDetail.UserDetailID = dbo.tblUserDetail.UserDetailID INNER JOIN
dbo.aspnet_UsersInRoles ON dbo.tblUserDetail.UserID = dbo.aspnet_UsersInRoles.UserId INNER JOIN
dbo.aspnet_Roles ON dbo.aspnet_UsersInRoles.RoleId = dbo.aspnet_Roles.RoleId
WHERE (dbo.tblLoginStatusDetail.Success = 1) AND (dbo.tblUserDetail.SubscriberID LIKE N'P%')
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.