CREATE TABLE mit Dynamische Spalte
Ich das einfügen muss einige Daten in eine temp-Tabelle.
Habe ich einige bedingte basierten Säulen wie Salary
, Code
.
Wie kann ich erstellen Sie eine Tabelle für bedingten basiert Spalten? Ich nicht verwenden wollen
SELECT INTO #tempTable
Hier ist der code:
DECLARE @sql NVARCHAR(MAX)
,@sqlSelect NVARCHAR(MAX) = ''
,@sqlFrom NVARCHAR(MAX) =''
CREATE TABLE #myTempTable (Id INT, DeptId INT, DeptName VARCHAR(100))
SET @sqlSelect ='INSERT INTO #myTempTable
SELECT EMP.Id, EMP.DeptId, EMP.DeptName'
SET @sqlFrom =' FROM dbo.EMPLOYEE AS EMP'
IF (someCondition)
BEGIN
SET @sqlSelect = @sqlSelect +', EMP.Salary, EMP.Code'
END
SET @sql = @sqlSelect +@sqlFrom
EXEC sp_executesql @sql
Jede Hilfe/Vorschläge, wie ich besser machen kann?
Update:
Zunächst verwendete ich SELECT INTO #TempTable
ohne Angabe keine Spalten, SQL Azure nicht unterstützt, habe ich beschlossen zu gehen mit INSERT INTO
. Aber nicht sicher, wie kann ich dynamische Spalten in einer definierten Struktur bereits. Vollständig dynamisches SQL 🙁
Aktualisiert meine Frage. Siehe update-Teil für mehr Informationen
Sie können nicht hinzufügen von Spalten zu Tabellen dynamisch. Sie müssen alle Spalten definiert im Voraus.
Also muss ich eine Tabelle ERSTELLEN, einschließlich Lohn -, Code-Spalten, auch wenn Sie nicht in der Auswahl? Wenn das der Fall ist, die, um es legen wird, wenn ich " nur 3 Spalten? Sorry, ich bin nicht gut in sql.
Richtig ist, müssen Sie erstellen alle Spalten, die Sie brauchen können. Wenn eine Spalte ist optional, stellen Sie es auf null festlegbar durch hinzufügen
Alle Spalten, die keine Daten benötigen, um null-Werte zulassen. Andere als, dass das einfügen sollte funktionieren
Sie können nicht hinzufügen von Spalten zu Tabellen dynamisch. Sie müssen alle Spalten definiert im Voraus.
Also muss ich eine Tabelle ERSTELLEN, einschließlich Lohn -, Code-Spalten, auch wenn Sie nicht in der Auswahl? Wenn das der Fall ist, die, um es legen wird, wenn ich " nur 3 Spalten? Sorry, ich bin nicht gut in sql.
Richtig ist, müssen Sie erstellen alle Spalten, die Sie brauchen können. Wenn eine Spalte ist optional, stellen Sie es auf null festlegbar durch hinzufügen
NULL
nach seinen Daten geben, wie diese: Salary money NULL
. Wenn Sie eine Zeile einfügen, die nicht Salary
, NULL
eingefügt würde.Alle Spalten, die keine Daten benötigen, um null-Werte zulassen. Andere als, dass das einfügen sollte funktionieren
InformationsquelleAutor Billa | 2013-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie vielen dynamischen Spalten brauchen Sie?
Was über eine Spalte namens
Dynamic
Typnvarchar(MAX)
oder so etwas ähnliches, und dann können Sie einfach Ihre Daten und formatieren Sie gegebenenfalls.Weitere Möglichkeit ist die Erstellung einer Tabelle mit
NULL
Spalten.Zu diesem Zweck in SQL, können Sie Folgendes tun:
Beachten Sie die
NULL
Spalte oben auch.Finden Sie hier weitere Erklärungen, erstellen von Tabellen mit
Primary Keys
undNULL
Spalten in SQL:Erstellen von Tabellen in SQL
Wie Sie bereits erwähnt Sie müssen Sie dynamisch, müssen Sie Sie alle zur gleichen Zeit?
Nehme ich das default-Spalten 5 und ich nehmen 2 oder mehr Spalten, die Hinzugefügt wird, in eine oder mehrere If-Anweisung, die eine bestimmte Bedingung erfüllen
OK. Es scheint, Ihre beste Wette ist die Verwendung der NULL-Methode erwähnt. Datenbanken sind hart codiert, die durch design, Sie sind nicht dynamisch. Wenn Sie wirklich brauchen, Ihre Datenbank zu sein, die dynamische, kann man sich in
In RAM
DatenbankenKönnen Sie mir helfen, die syntax für die Handhabung von NULL? Sorry bin schlecht in SQL. Nur lernen 🙁
InformationsquelleAutor rhughes
Wie angedeutet, Ihre beste Wette ist wahrscheinlich erstellen alle Spalten, die Sie benötigen, und stellen Sie null-Werte zulässt, wenn optional. Also:
Und
InformationsquelleAutor Shock
Siehe Beispiel unten:
InformationsquelleAutor Suresh
Code unten kann für Sie arbeiten.
InformationsquelleAutor Pratik Gohil
Könnte man einfach ändern, die temp-Tabelle, wenn die Bedingung erfüllt ist (ich nehme an, Sie wissen, die erforderlichen Spalten an dieser Stelle?)
Möchten Sie vielleicht, um zu testen, ob die Spalte existiert zuerst, wenn Sie mehr als eine Bedingung, die aktiviert werden konnte - was kann man tun, etwa so:
Wie andere bemerkt haben, können Sie die Spalten, die im Voraus als null - oder erstellen Sie die Tabelle, nachdem die Bedingung erfüllt ist.
InformationsquelleAutor Stephen
Können Sie die
Befehl zum ändern der name einer zuvor definierten Platzhalter Spalte.
Erstellen Sie beispielsweise die
#tempTable
mit zusätzlichen Felder wie"VCHAR100_1"
,"BOOL_1"
,"Int_1"
usw. Wenn Sie brauchen, um das Feld zu nutzen, benennen Sie es auf den gewünschten Namen, damit Ihr code später auf Sie verweisen kann, um die Spalte von einem nicht-kryptischen Namen.InformationsquelleAutor MichaelSc
Ich denke, was du wirklich suchst ist unmöglich für SQL. Als ich undrestand Sie möchten, fügen Sie eine Spalte zum Beispiel für die Tupel, die die Bedingungen erfüllt. Also ich denke du brauchst einige andere Datenbank-engines wie NoSQL(ich bin nicht sehr vertraut mit NoSQL-aber so viel wie ich weiß, es kann horizontal Skala)
Wenn Sie nicht wechseln wollen, von sql ich denke, Sie sollten überdenken Ihre Gestaltung.
Wenn Sie darauf bestehen, Ihrem design können Sie Dinge tun, wie zum Beispiel das hinzufügen einer Spalte namens "Spaltenname" und in einer weiteren Spalte "Spalte " Daten" und füllen Sie es bei Bedarf. Aber wie Sie sehen können, es hat seine eigenen Zwänge wie die Daten der Spalte "Daten" sollte der gleiche Typ.
InformationsquelleAutor DrStein
verwenden Sie den code, und Sag mir, funktioniert es oder nicht ??
Ich hoffe, es wird
InformationsquelleAutor Sandesh
Wenn diese Tabelle zu GROß ist, ich denke, dass Ihr-und in Ihrer Logik, die Sie machen, VERBINDET mit dieser Tabelle, die Sie benötigen zum erstellen von Indizes in der Zieltabelle
Können Sie gehen, um mit Physischen Tabelle nicht TEMP
InformationsquelleAutor Valentin Petkov
Versuchen.
InformationsquelleAutor user3605493
Hier ist eine andere Lösung mit vollständig dynamischen Spalten:
Das wird nicht funktionieren, wenn Sie substite myTempTable mit #myTempTable, weil der SQL-engine. Um es zu beheben und erhalten die richtigen Spaltennamen-Liste, die Sie möglicherweise verwenden einige tricks, out of scope. Aber noch funktioniert es, mit nicht-temporären Tabellen.
InformationsquelleAutor Alex Peshik
Können Sie erzeugen, VERÄNDERN Aussagen, die dynamisch zu ändern die Struktur Ihrer Tabelle. Unten gezeigt mit einer temp-Tabelle, aber natürlich ist der Ansatz funktioniert auch für normale Tabellen.
ok, sorry, werde ich im Hinterkopf behalten beim nächsten mal.
Wenn meine Antwort richtig ist, aber wie es nach unten gestimmt, kann niemand hinein schauen. Was sollte getan werden, um dieses Problem zu beheben.
InformationsquelleAutor fgohil