Обработка столбцов идентификационных данных в операторе “Insert Into TABLE Values ()”?

Пакет Text_LanguageDetect груши дал ужасные результаты: «роскошные апартаменты в центре города» были определены как португальский ...

Google API по-прежнему является лучшим решением, они дают бесплатный кредит в размере 300 долларов и предупреждают, прежде чем взимать с вас плату.

Ниже приведена супер простая функция, которая использует file_get_contents для загрузки языка, обнаруженного API, поэтому нет необходимости загружать или устанавливать библиотеки и т. д.

function guess_lang($str) {

    $str = str_replace(" ", "%20", $str);

    $content = file_get_contents("https://translation.googleapis.com/language/translate/v2/detect?key=YOUR_API_KEY&q=".$str);

    $lang = (json_decode($content, true));

    if(isset($lang))
        return $lang["data"]["detections"][0][0]["language"];
 }

Выполнить:

echo guess_lang("luxury apartments downtown montreal"); // returns "en"

Ключ API Google Translate можно получить здесь: https://console.cloud.google.com/apis/library/translate.googleapis. com /

Это простой пример коротких фраз, чтобы помочь вам. Для более сложных приложений вы захотите ограничить свой ключ API и явно использовать библиотеку.

33
задан James McMahon 1 June 2009 в 15:40
поделиться

5 ответов

По умолчанию, если у вас есть столбец идентификаторов, вам не нужно , но не нужно указывать его в разделе ЗНАЧЕНИЯ. Если ваша таблица:

ID    NAME    ADDRESS

Тогда вы можете сделать:

INSERT INTO MyTbl VALUES ('Joe', '123 State Street, Boston, MA')

Это автоматически сгенерирует идентификатор для вас, и вам вообще не нужно об этом думать. Если вы SET IDENTITY_INSERT MyTbl ON , вы можете присвоить значение столбцу ID.

58
ответ дан 27 November 2019 в 17:33
поделиться

Еще одна уловка для создания списка столбцов - просто перетащить узел «Столбцы» из обозревателя объектов в окно запроса.

27
ответ дан 27 November 2019 в 17:33
поделиться

Поскольку нецелесообразно помещать код в комментарий, в ответ на ваш комментарий в ответе Эрика, что он не работает для вас ...

Я только что запустил следующее на Окно SQL 2005 (извините, нет 2000 под рукой) с настройками по умолчанию, и он работал без ошибок:

CREATE TABLE dbo.Test_Identity_Insert
(
    id  INT IDENTITY NOT NULL,
    my_string   VARCHAR(20) NOT NULL,
    CONSTRAINT PK_Test_Identity_Insert PRIMARY KEY CLUSTERED (id)
)
GO

INSERT INTO dbo.Test_Identity_Insert VALUES ('test')
GO

SELECT * FROM dbo.Test_Identity_Insert
GO

Возможно, вы отправляете значение идентификатора в свой список значений? Я не думаю, что вы можете заставить его игнорировать столбец, если вы действительно передадите ему значение. Например, если в вашей таблице 6 столбцов, и вы хотите игнорировать столбец IDENTITY, вы можете передать только 5 значений.

2
ответ дан 27 November 2019 в 17:33
поделиться

Лучше всего явно указать столбцы:

Insert Into TableName(col1, col2,col2) Values(?, ?, ?)

В противном случае исходная вставка сломается, если вы добавите еще один столбец в таблицу.

11
ответ дан 27 November 2019 в 17:33
поделиться

У вас есть 2 варианта:

1) Либо указать список имен столбцов (без столбца идентификаторов).

2) SET IDENTITY_INSERT tablename ON, а затем инструкции вставки, которые обеспечивают явное значения для столбца идентификаторов, за которым следует SET IDENTITY_INSERT tablename OFF.

Если вы избегаете списка имен столбцов, возможно, этот «трюк» может помочь?:

-- Get a comma separated list of a table's column names
SELECT STUFF(
(SELECT 
',' + COLUMN_NAME AS [text()]
FROM 
INFORMATION_SCHEMA.COLUMNS
WHERE 
TABLE_NAME = 'TableName'
Order By Ordinal_position
FOR XML PATH('')
), 1,1, '')
6
ответ дан 27 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: