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 № 1CREATE 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.