J'ai la définition VIEW
suivante:
create view v_1 as select * from t1 where [date] between '2010-01-01' and '2019-01-01' union all select * from t2 where [date] between '2012-01-01' and '2019-01-01' union all select * from t3 where [date] between '2013-01-01' and '2019-01-01'
Scénario 1: Je souhaite supprimer (ou remplacer par une chaîne vide) la table t1
instruction select.
La vue doit ressembler à:
create view v_1 as select * from t2 where [date] between '2012-01-01' and '2019-01-01' union all select * from t3 where [date] between '2013-01-01' and '2019-01-01' union all select * from t4 where [date] between '2014-01-01' and '2019-01-01'
Scénario 2: Vous voulez supprimer l'instruction select de la table t4
. p>
La vue doit ressembler à:
create view v_1 as select * from t1 where [date] between '2010-01-01' and '2019-01-01' union all select * from t2 where [date] between '2012-01-01' and '2019-01-01' union all select * from t3 where [date] between '2013-01-01' and '2019-01-01' union all select * from t4 where [date] between '2014-01-01' and '2019-01-01'
Remarque : en fonction de l'exigence, vous pouvez supprimer toute instruction de sélection de la définition VIEW. / p>
3 Réponses :
Le serveur SQL vous permet d'utiliser l'expression régulière comme modèle de recherche dans l'éditeur, il vous suffit donc de:
Appuyez sur Ctrl + F
Activer l'utilisation d'expressions régulières
Comme modèle de recherche, utilisez select. + from t1 (. * \ n) +? select
, où t1
peut être remplacé par n'importe quel nom de table p>
Comme modèle de remplacement, utilisez select
Voir l'écran ci-dessous (après remplacement):
@MAK Non, le serveur SQL ne prend pas en charge ces expressions régulières avancées dans les requêtes.
Au lieu de vue, créez une fonction de table en ligne également appelée vue avec paramètres. Par exemple:
SELECT * FROM T1 A INNER JOIN V_1(1, 0, 0, 1) B ON ....
Vous pouvez utiliser la fonction dans des jointures comme view, mais vous pouvez transmettre les données à renvoyer. Par exemple:
create function v_1 ( @HasQuery1 BIT ,@HasQuery2 BIT ,@HasQuery3 BIT ,@HasQuery4 BIT ) RETURNS TABLE as RETURN ( select * from t1 where [date] between '2010-01-01' and '2019-01-01' AND @HasQuery1 = 1 union all select * from t2 where [date] between '2012-01-01' and '2019-01-01' AND @HasQuery2 = 1 union all select * from t3 where [date] between '2013-01-01' and '2019-01-01' AND @HasQuery3 = 1 union all select * from t4 where [date] between '2014-01-01' and '2019-01-01' AND @HasQuery4 = 1 )
J'aime la réponse de @gotqn mais, si cela doit être une vue, je ferais ceci:
SELECT v.* FROM dbo.yourView AS v; SELECT v.* FROM dbo.yourView AS v WHERE v.show = 1; SELECT v.* FROM dbo.yourView AS v WHERE v.show IN (1,3); SELECT v.* FROM dbo.yourView AS v WHERE v.show <> 1;
Ce qui est bien ici, c'est que l'optimiseur est suffisamment intelligent pour ignorer et éviter complètement touchant les tables avec des données non incluses dans l'ensemble de résultats final.
Notez ces requêtes et les plans d'exécution:
--Sample Tables: CREATE TABLE dbo.t1(id INT IDENTITY PRIMARY KEY, col1 INT); CREATE TABLE dbo.t2(id INT IDENTITY PRIMARY KEY, col1 INT); CREATE TABLE dbo.t3(id INT IDENTITY PRIMARY KEY, col1 INT); CREATE TABLE dbo.t4(id INT IDENTITY PRIMARY KEY, col1 INT); INSERT dbo.t1(col1) VALUES (10),(20),(30); INSERT dbo.t2(col1) VALUES (60),(620),(630); INSERT dbo.t3(col1) VALUES (0); INSERT dbo.t4(col1) VALUES (0); GO --Solution CREATE VIEW dbo.yourView AS SELECT t.*,show = 1 FROM dbo.t1 AS t UNION ALL SELECT t.*,show = 2 FROM dbo.t2 AS t UNION ALL SELECT t.*,show = 3 FROM dbo.t3 AS t UNION ALL SELECT t.*,show = 4 FROM dbo.t4 AS t GO
Quel est l'intérêt de changer la définition? Vos applications clientes recevront des résultats imprévisibles car elles ne sauraient pas quelles données retournent exactement. Créez plusieurs vues différentes ou ajoutez une colonne d'indicateur à votre colonne actuelle, puis filtrez les données dont vous avez besoin du côté client.
Copie possible de Actualiser la vue après la suppression du tableau
Ceci est juste un kludge à votre question précédente. Ce qui semble être un kludge à vos problèmes de schéma.