Question

CREATE TABLE [dbo].[MembershipModule](
 [Id] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
 [ParentId] [uniqueidentifier] NULL,
 [TargetId] [int] NULL,
 [WebContentId] [uniqueidentifier] NULL,
 [Name] [varchar](35) NOT NULL,
 [NameUpper]  AS (isnull(upper([Name]),'')) PERSISTED NOT NULL,
 [UriPrefix] [varchar](max) NULL,
 [UriText] [varchar](max) NULL,
 [UriComputed]  AS ??? PERSISTED,
 [Description] [varchar](100) NULL,
 [Created] [date] NOT NULL,
 [Modified] [datetime2](7) NOT NULL,
 [MenuItem] [bit] NOT NULL,
 [Enabled] [bit] NOT NULL,
 [Position] [smallint] NULL,
 CONSTRAINT [PK_MembershipModule] PRIMARY KEY CLUSTERED 
(
 [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Jusqu'à présent, le champ UriComputed est calculé comme suit:

lower(replace(isnull([UriPrefix],'/')+coalesce([UriText],[Name]),' ','-'))

Ce produit la sortie suivante

Résultats

Maintenant, je voudrais mettre fin à toutes les valeurs UriComputed avec '/'. Ce serait facile à réaliser en ajoutant + '/' au champ calculé, à l'exception du fait que « sans texte » uri, seraient résiliés comme //, que je ne veux pas le cas.

depuis le sql je peux mettre dans un champ calculé est assez limité (et je ne sais pas vraiment l'étendue de ces limites) Je pensais que je demande ici comment ajouter ceci.

au fond, je veux que la sortie dans l'image à être

/a/login/
/a/announcements/
/a/
/

mon plus proche tentative de faire cela a été:

isnull(convert(varchar(MAX),nullif(len(coalesce([UriText],[Name])),0)),'/')

Ce qui fait une sorte de gâchis, et ajoute un certain nombre si elle doit se terminer dans « / », et ajoute « / » quand il se doit, ce que j'avais besoin est le contraire (qui est, « / » lorsque la longueur est 0, '' autrement)

S'il y a une ligne ou quelque chose comme si je pouvais utiliser ce serait essentiellement, mais je ne sais pas à ce sujet.

Merci!

Était-ce utile?

La solution

Cela a fonctionné pour moi:

[UriComputed]  AS (CASE 
                     WHEN RIGHT(lower(replace(isnull([UriPrefix],'/')+coalesce([UriText],[Name]),' ','-')), 1) = '/' THEN
                       lower(replace(isnull([UriPrefix],'/')+coalesce([UriText],[Name]),' ','-'))
                     ELSE
                       lower(replace(isnull([UriPrefix],'/')+coalesce([UriText],[Name]),' ','-')) +'/'
                   END) PERSISTED,

Full CREATE TABLE:

CREATE TABLE [dbo].[MembershipModule](
 [Id] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
 [ParentId] [uniqueidentifier] NULL,
 [TargetId] [int] NULL,
 [WebContentId] [uniqueidentifier] NULL,
 [Name] [varchar](35) NOT NULL,
 [NameUpper]  AS (isnull(upper([Name]),'')) PERSISTED NOT NULL,
 [UriPrefix] [varchar](max) NULL,
 [UriText] [varchar](max) NULL,
 [UriComputed]  AS (CASE 
                     WHEN RIGHT(lower(replace(isnull([UriPrefix],'/')+coalesce([UriText],[Name]),' ','-')), 1) = '/' THEN
                       lower(replace(isnull([UriPrefix],'/')+coalesce([UriText],[Name]),' ','-'))
                     ELSE
                       lower(replace(isnull([UriPrefix],'/')+coalesce([UriText],[Name]),' ','-')) +'/'
                    END) PERSISTED,
 [Description] [varchar](100) NULL,
 [Created] [date] NOT NULL,
 [Modified] [datetime2](7) NOT NULL,
 [MenuItem] [bit] NOT NULL,
 [Enabled] [bit] NOT NULL,
 [Position] [smallint] NULL)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top