/ / Procedura składowana w celu utworzenia tabeli przy użyciu listy nazw kolumn rozdzielanych przecinkami [zamknięte] - sql, sql-server-2005

Przechowywana procedura tworzenia tabeli przy użyciu rozdzielanej przecinkami listy nazw kolumn [closed] - sql, sql-server-2005

Korzystam z programu SQL Server 2005. Chciałbym utworzyć procedurę składowaną, która utworzyłaby tabelę o nazwie table1 i używając przekazanej listy wartości rozdzielanych przecinkami, użyj każdego elementu na tej liście jako nazwy kolumny.

Zasadniczo byłoby to jak sp_procedurename (col1, col2, col3)

utworzyłby table1 z kolumnami col1, col2 i col3 (i gdyby wszyscy mogli być varcharami (max), to też byłoby świetnie.

Odpowiedzi:

1 dla odpowiedzi № 1
CREATE PROCEDURE dbo.whatever -- do not use sp_ prefix!
@tablename SYSNAME,
@column_list VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sql NVARCHAR(MAX);

SET @sql = N"CREATE TABLE dbo." + QUOTENAME(@tablename) + "
(
[" + REPLACE(@column_list, ",", "] VARCHAR(MAX),
[")
+ "] VARCHAR(MAX)
);";

EXEC sp_executesql @sql;
END
GO

Nie powoduje to obsługi błędów, na przykład if @tablename już istnieje, ani nie robi nic, aby chronić Cię przed wstrzyknięciem SQL. Jeśli ta rozdzielona przecinkami lista nazw kolumn wpisanych przez użytkownika, należy zachować szczególną ostrożność.

o I oto dlaczego nie powinieneś używać sp_ prefiks procedur przechowywanych.