Ich habe ein Problem, wo ich Tabellen auf Grundlage der Anzahl der Parameter in der gespeicherten Prozedur übergeben erstellen muß wie folgt durchführen:eine effiziente Art und Weise benötigen die angegebene SQL-Abfrage in SQL Server, gespeicherte Prozedur
----when there is one column
'CREATE TABLE [dbo].['[email protected]_name+'] (
['[email protected]+'] [VARCHAR](200)
) '
----when there are two column
'CREATE TABLE [dbo].['[email protected]_name+'] (
['[email protected]+'] [VARCHAR](200),
['[email protected]+'] [VARCHAR](200)
) ;'
----when there are three column
'CREATE TABLE [dbo].['[email protected]_name+'] (
['[email protected]+'] [VARCHAR](200),
['[email protected]+'] [VARCHAR](200),
['[email protected]+'] [VARCHAR](200)
) '
Eine Möglichkeit, die ich kenne, dies zu tun ist:
----when there is one column
If ((@colname1 IS NOT NULL AND LEN(@colname1) !=0))
BEGIN
'CREATE TABLE [dbo].['[email protected]_name+'] (
['[email protected]+'] [VARCHAR](200)
)'
END
----when there are two column
If ((@colname1 IS NOT NULL AND LEN(@colname1) !=0)
AND (@colname2 IS NOT NULL AND LEN(@colname2) !=0))
BEGIN
Drop table [dbo].['[email protected]_name+']
'CREATE TABLE [dbo].['[email protected]_name+'] (
['[email protected]+'] [VARCHAR](200),
['[email protected]+'] [VARCHAR](200)
)'
END
----when there are three column
If ((@colname1 IS NOT NULL AND LEN(@colname1) !=0)
AND (@colname2 IS NOT NULL AND LEN(@colname2) !=0)
AND (@colname3 IS NOT NULL AND LEN(@colname3) !=0))
BEGIN
Drop table [dbo].['[email protected]_name+']
'CREATE TABLE [dbo].['[email protected]_name+'] (
['[email protected]+'] [VARCHAR](200),
['[email protected]+'] [VARCHAR](200),
['[email protected]+'] [VARCHAR](200)
) '
END
Durch die Nutzung dieser Art und Weise, mein Code sehr lang wird. Gibt es einen anderen effizienten Weg, dies zu tun? Wenn ich Werte für @ colname1, @ colname2, @ colname3 getrennt übergebe, übergebe ich Werte in einem einzigen Parmaeter @colname als @colname = 'col1, col2, col3', wie kann ich das tun?
Dies ist wahrscheinlich eine schlechte Idee zu beginnen. Erstellen Sie Datenbankobjekte wie Tabellen in Entwurfszeit, nicht in Laufzeit. –
Was versuchen Sie eigentlich zu erreichen? Vielleicht gibt es einen besseren Weg, der nicht die dynamische Erstellung von Tabellen beinhaltet. –
Sie können immer mit einer Spalte beginnen und anschließend "alter table add column" -Anweisungen bedingt ausführen. – Jeremy