Voici une méthode qui utilise une table de nombres auxiliaires pour analyser la chaîne d'entrée. La logique peut facilement être ajoutée à une fonction qui renvoie une table. Cette table peut ensuite être jointe pour rechercher les lignes correctes.
Étape 1: Créer la table Numéros
SET NOCOUNT ON
GO
IF EXISTS
(
SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Numbers'
AND TABLE_SCHEMA = 'dbo'
AND TABLE_TYPE = 'BASE TABLE'
)
BEGIN
DROP TABLE dbo.Numbers
END
GO
CREATE TABLE dbo.Numbers
(
Number smallint IDENTITY(1, 1) PRIMARY KEY
)
GO
WHILE 1 = 1
BEGIN
INSERT INTO dbo.Numbers DEFAULT VALUES
IF SCOPE_IDENTITY() = 32767
BEGIN
BREAK
END
END
GO
Étape 2: Parse la chaîne d'entrée
CREATE FUNCTION dbo.ParseString(@input_string varchar(8000), @delim varchar(8000) = " ")
RETURNS TABLE
AS RETURN
(
SELECT Number
FROM dbo.Numbers
WHERE CHARINDEX
(
@delim + CONVERT(VARCHAR(12),Number) + @delim,
@delim + @input_string + @delim
) > 0
)
GO
**EXAMPLE**
SELECT * FROM dbo.ParseString('1:45:34:98',':')
Étape 3: Utiliser les résultats mais vous voulez/besoin
Number
------
1
34
45
98
de bout en bout Exemple
Créer fonction qui renvoie la BNumber appropriée (bien sûr changer d'utiliser l'commenté SQL)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION dbo.GetBNumber (@uid int)
RETURNS VARCHAR(8000)
AS
BEGIN
RETURN '1:45:34:98'
--select B_Numbers from Info_Step WHERE uid = @uid
END
GO
Utilisez les fonctions d'utilisation pour retourner le résultats souhaités
-- Using Test Data
SELECT N.Number FROM Numbers N
JOIN dbo.ParseString(dbo.GetBNumber(12345),':') Q ON Q.Number = N.Number
-- Using Your Data (Untested but should work.)
SELECT N.Bay
FROM TABLE N
JOIN dbo.ParseString(dbo.GetBNumber(ENTER YOU NUMBER HERE),':') Q ON Q.Number = N.uid
résultats
Number
------
1
34
45
98
Cela ne fonctionnera pas parce que la chaîne d'entrée doit être séparée en jetons (4 lignes différentes) et puis les tables réunies. Votre méthode va essayer de trouver un UID comme '..... 1: 45: 34: 98 .....', ce qui n'est pas le cas car l'UID est probablement un nombre entier. – beach