De l'UNION de l'intérieur S'il en EXISTE un énoncé ne fonctionne pas
SELECT A, B, C FROM TUser
UNION
IF EXISTS(SELECT dataUserId FROM TUserData WHERE DataId = @dataId AND UserId = @userId)
BEGIN
SELECT @dataUserId = dataUserId FROM TUserData WHERE DataId = @dataId AND UserId = @userId
SELECT A, B, C FROM TUser WHERE UserId = dataUserId
END
Ce n'est pas permis, également, de l'union devraient avoir le même nombre de colonnes sur les deux instructions select
Eh bien, le principal problème est que ce qui suit la directive de l'union n'est pas une instruction select.
Eh bien, le principal problème est que ce qui suit la directive de l'union n'est pas une instruction select.
OriginalL'auteur spj | 2010-03-10
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le transformer comme ça:
OriginalL'auteur Kerido
Qui n'est pas valide SQL. Il semble que vous essayez d'écrire quelque chose comme une fonction/procédure stockée.
C'est la façon dont l'UNION des œuvres (http://www.w3schools.com/SQL/sql_union.asp):
Les deux instructions SELECT doivent avoir le même nombre de colonnes. Les colonnes doivent également avoir des types de données. Aussi, les colonnes de chaque instruction SELECT doit être dans le même ordre.
OriginalL'auteur Timothy
Mauvais usage de l'union. Toutes les tables que vous êtes en tirant ensemble dans une union européenne ont les mêmes colonnes. Quelque chose de plus comme:
OriginalL'auteur Dustin Laine
Vous pouvez utiliser existe dans la clause where à la place de l'instruction SI:
OriginalL'auteur Andrew Bezzub
OriginalL'auteur ecounysis
Vous ne pouvez pas utiliser un
if
énoncé à l'intérieur d'ununion
comme ça.Au lieu d'utiliser un
if exists
vous pouvez simplement utiliser uninner join
:Il y a une petite différence lors de l'utilisation d'une jointure interne. Si vous arriverait-il à correspondre à plus d'un enregistrement de la TUserData table, il ne sera pas au hasard jeter tous les résultats sauf un que la
select @dataUserId=...
serait, en revanche si sera de retour le résultat de chaque match.(À noter que l'union est inutile dans sa forme actuelle. Que vous obtenez tous les enregistrements de la table dans la première requête, tout ce que vous obtenez dans la deuxième requête ne seront doublons, mais je suppose que vous venez simplifié de la première requête et qu'il n'est pas tout, à partir de la table.)
OriginalL'auteur Guffa