2016-01-21 3 views
2

Это гипотетический случай ..Concat конкретной строка каждой вставленной строки

Я пытаюсь найти хороший подход, чтобы убедиться, что каждое значение вставляется в определенном столбце col1 моей таблицы mytable имеет определенную строку http:// в начале стоимости.

Пример:

Я хочу, чтобы вставить myprofile в mytable так (после моего проверки состояния ..) конечное значение будет http://myprofile

Я думаю, что хороший подход может быть с помощью триггера на вставку, но Я еще не нашел ничего конкретного.

Любые идеи?

спасибо.

+4

Не забудьте триггер обновления слишком. (Или управлять всеми вставками/обновлениями с помощью хранимых процедур и не иметь прав на вставку/обновление непосредственно в таблице.) – jarlh

+0

Да, триггер - это, безусловно, ваш путь. Поскольку эти ** очень специфичны для конкретного поставщика, нам действительно нужно знать конкретные RDBMS, которые вы используете - 'oracle',' sql-server', 'postgresql' и т. Д. –

+0

Hi @marc_s, спасибо за ваш комментарий (@jarlh тоже). Было бы замечательно иметь подход для SQL-SERVER и MYSQL, но если мне нужно будет выбрать один, это будет SQL-SERVER. –

ответ

1

Вы можете попробовать что-то вроде этого в качестве отправной точки - это для SQL Server (не знаю MySQL достаточно хорошо, чтобы обеспечить этот триггер код для вас):

-- create the trigger, give it a meaningful name 
CREATE TRIGGER PrependHttpPrefix 
ON dbo.YourTableName   -- it's on a specific table 
AFTER INSERT, UPDATE   -- it's for a specific operation, or several 
AS 
BEGIN 
    -- the newly inserted rows are stored in the "Inserted" pseudo table. 
    -- It has the exact same structure as your table that this trigger is 
    -- attached to. 
    -- SQL Server works in such a way that if the INSERT affected multiple 
    -- rows, the trigger is called *once* and "Inserted" contains those 
    -- multiple rows - you need to work with "Inserted" as a multi-row data set 
    -- 
    -- You need to join the "Inserted" rows to your table (based on the 
    -- primary key for the table); for those rows newly inserted that 
    -- **do not** start with "http://" in "YourColumn", you need to set 
    -- that column value to the fixed text "http:/" plus whatever has been inserted 
    UPDATE tbl 
    SET YourColumn = 'http://' + i.YourColumn 
    FROM dbo.YourTableName tbl 
    INNER JOIN Inserted i ON tbl.PKColumn = i.PKColumn 
    WHERE LEFT(i.YourColumn, 7) <> 'http://' 
END 
+0

Должно следовать предложению jarlh и поставить его «ПОСЛЕ ВСТАВКИ, ОБНОВЛЕНИЕ» –

Смежные вопросы