Peut-être que je ne vois pas le bois pour les arbres mais je suis coincé, alors voici la question:
Comment puis-je importer/insérer une liste de valeurs varchar séparées par des virgules dans une table? Je ne veux pas dire quelque chose comme ça:
'12345678,87654321,11223344'
mais ça:'12345678','87654321','11223344'
J'ai une fonction Split
- mais elle semble inutile dans ce cas, n'est-ce pas?
Voici un exemple simple (mock-SQL) pour montrer ce que je veux dire:
Create Table #IMEIS(
imei varchar(15)
)
INTO INTO #IMEIS(imei)
SELECT * FROM ('012251000362843', '012251001084784', '012251001168744', '012273007269862', '012291000080227', '012291000383084', '012291000448515')
SELECT * from #IMEIS
DROP TABLE #IMEIS;
Merci d'avance.
Puisqu'il n'y a aucun moyen de simplement passer cette "liste de varchars séparés par des virgules", je suppose qu'un autre système les génère. Si vous pouvez modifier légèrement votre générateur, il devrait être réalisable. Plutôt que de séparer par des virgules, vous séparez par union all select
, et vous devez ajouter un select
à la liste. Enfin, vous devez fournir des alias pour la table et la colonne dans votre sous-sélection:
Create Table #IMEIS(
imei varchar(15)
)
INSERT INTO #IMEIS(imei)
SELECT * FROM (select '012251000362843' union all select '012251001084784' union all select '012251001168744' union all
select '012273007269862' union all select '012291000080227' union all select '012291000383084' union all
select '012291000448515') t(Col)
SELECT * from #IMEIS
DROP TABLE #IMEIS;
Mais en notant votre commentaire à une autre réponse, à propos d'avoir 5000 entrées à ajouter. Je pense que la limitation 256 tables par sélection peut se déclencher avec le modèle "union all" ci-dessus, vous devrez donc encore fractionner ces valeurs en instructions distinctes.
Quelque chose comme ça devrait fonctionner:
INSERT INTO #IMEIS (imei) VALUES ('val1'), ('val2'), ...
MISE À JOUR:
Apparemment, cette syntaxe n'est disponible qu'à partir de SQL Server 2008.
Sql Server n'a pas (à ma connaissance) de fonction Split intégrée. La fonction de division en général sur toutes les plates-formes aurait une valeur de chaîne séparée par des virgules à diviser en chaînes individuelles. Dans sql server, l'objectif principal ou nécessaire de la fonction Split est de convertir une valeur de chaîne séparée par des virgules ("abc, cde, fgh") en une table temporaire avec chaque chaîne comme lignes.
La fonction Split ci-dessous est une fonction de valeur de table qui nous aiderait à diviser une chaîne séparée par des virgules (ou toute autre valeur de délimiteur) en chaîne individuelle.
CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (items varchar(8000))
as
begin
declare @idx int
declare @slice varchar(8000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
sélectionnez le top 10 * de dbo.split ('Chennai, Bangalore, Mumbai', ',')
l'intégralité peut être trouvée sur le lien suivant http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table. aspx