Эта статья пока не оценена по шкале оценки контента Википедии . |
Со страницы, которая раньше была на Transact SQL (теперь перенаправление), скопировано сюда на случай, если это будет полезно:
— Саймон 20:03, 15 августа 2005 (UTC)
«Язык управления потоком» звучит неловко, но именно его используют MSDN и Books Online. [1] Давайте придерживаться официальной документации. -- Mikeblas 05:43, 7 января 2006 (UTC)
Стоит ли добавить немного о хранимых процедурах и функциях? Я думал о чем-то вроде следующего, хотя, если кто-нибудь может проверить меня, это не относится только к ветке MS tsql.
Помимо возможности хранить запросы, хранимые процедуры и функции позволяют обобщать код для лучшего повторного использования и/или ясности. (Между ними есть некоторые различия, хотя их эффекты могут показаться схожими. Например, при вызове процедуры неуказанное значение предполагается значением по умолчанию, если оно есть, в то время как в функциях ключевое слово default должно быть передано явно, чтобы использовать заданное значение по умолчанию.) Функция может использоваться в любом месте, где может находиться таблица в запросе, хотя она должна иметь псевдоним [? может быть неправильно]
Выбирать *Из панели fn_Foo()
Оператор Case — это версия переключателя TSQL, и его можно использовать везде, где может быть выражение SQL. Существует две версии
ВЫБИРАТЬ СЛУЧАЙ @мояПеременная КОГДА 10 ТОГДА ДОБ КОГДА 20 ТОГДА имя КОГДА 30 ТОГДА цель ELSE что-тоЕще КОНЕЦИз tblFoo
Где @myVariable может быть чем угодно, что можно сравнить с элементами между «когда» и «тогда».
и
Выбрать дату рожденияИз tblFooГДЕ цель = СЛУЧАЙ КОГДА (@myVariable = 10) ТОГДА 'обучать' КОГДА (@myOtherVariable =23) ТО «исключить» КОГДА (@myVariable = 20 и @myOtherVariable = 40) ТОГДА «есть» ИНАЧЕ 'ходить' КОНЕЦ
Где каждое выражение между when и then должно оцениваться как true или false. Скобки не нужны.
”Некоторые считают, что "чтобы сделать его более мощным" — это не совсем истинное намерение Transact-SQL существовать. Причиной может быть привязка к поставщику . О, чушь. —Предыдущий неподписанный комментарий добавлен 18.26.4.40 (обсуждение) 18:04, 14 октября 2008 (UTC)
В разделе "Управление потоком" в конце говорится "Пример цикла WHILE приведен ниже.", но такого примера не приводится. Можно ли это безопасно удалить или кто-то работает над примером? 138.80.0.10 ( обсуждение ) 15:36, 9 апреля 2010 (UTC)
Пример кода DATEPART какой-то уродливый. Как насчет этого:
IF DATENAME(WEEKDAY,CURRENT_TIMESTAMP) IN ('Суббота','Воскресенье') ПЕЧАТАТЬ «Выходные».ЕЩЕ ПЕЧАТАТЬ «Будний день».
Это гораздо более читабельно, чем текущая версия, использующая
ЧАСТЬДАТЫ(dw,ДАТА())
дважды. И так как
ДАТА()
является недетерминированной функцией, возникает неоднозначность относительно того, должны ли два ее вызова возвращать одно и то же значение или нет.
Конечно, вы правы, названия «Суббота» и «Воскресенье» зависят от локали. Но какова цель здесь, проиллюстрировать принцип кодирования управления потоком языка или написать пуленепробиваемый t-sql, чтобы выяснить, выходные это или нет? Существующий пример — довольно запутанный способ проиллюстрировать, что t-sql может это сделать
если @x>1 вывести «Больше», иначе вывести «Меньше»
и выводимый текст также не является прозрачным для локали.
если имя_даты(день_недели,текущая_метка_времени) в (имя_даты(день_недели,'1900-01-06'),имя_даты(день_недели,'1900-01-07')) распечатать случай serverproperty('LCID') когда 1033, то «это выходные». когда 1031, то «Es ist das Wochenende». -- добавьте французский, испанский и т. д. для соответствия пользовательской базе else raiserror('Неизвестная локаль для сообщения.',11,1) конецеще распечатать случай serverproperty('LCID') если 1033, то «Сегодня будний день». когда 1031, то «Es ist ein Wochentag». else raiserror('Неизвестная локаль для сообщения.',11,1) конец
Это вызывает недетерминированную функцию current_timestamp только один раз, поэтому нет двусмысленности относительно возвращаемого значения, и указывает даты выходных в однозначном и предварительно компилируемом формате. Вывод изменяется в соответствии с локалью сервера, а сравнения не зависят от сортировки. (Это тоже шутка.) --Farmhouse121 04:06, 30 июня 2006 (UTC)
Да, но это английская версия, поэтому я думаю, что на самом деле разумно локализовать примеры для общепринятого английского языка. Я возвращаюсь к своему комментарию, что смысл в том, чтобы проиллюстрировать, как работает язык управления потоком, а не создавать пуленепробиваемый производственный код для реализации третьей стороной. (Причина в том, что пуленепробиваемый код часто не является чистым изложением концепции.) Я чувствую, что последовательность "datepart(dw,date())" и т. д. использует много знаний T-Sql, которые наивный человек не знает. Настоящий вопрос в том, кто читает эту статью и почему? Очевидно, что одна группа читателей — это эксперты T-Sql, изучающие, что есть в Википедии о T-Sql (т. е. это мы). Я бы предположил, что другая, и значительная, группа читателей — это опытные программисты, которые рассматривают это как ресурс для получения сводки возможностей T-Sql, чтобы помочь решить, подходит ли им продукт. Они поймут, что делает оператор "if then", даже если просто сказать "T-Sql обладает IF <LOGICAL-EXPRESSION> <STATEMENT> ELSE <ALTERNATE-STATEMENT>". Что вы думаете? --Farmhouse121 21:41, 3 июля 2006 (UTC)
Разве название этой статьи не должно быть T-SQL, как название SQL - SQL , а не Structured Query Language ? -- Стефан Эрварр Сигмундссон ( обсуждение ) 16:08, 16 апреля 2008 (UTC)
Как можно выполнить оператор удаления без предложения from? Это для удаления всей базы данных или что-то в этом роде? Кажется, есть очевидный ответ, но я не могу его придумать. -- 207.235.73.130 (обсуждение) 14:16, 23 сентября 2011 (UTC)
DELETE
и UPDATE
допускают FROM
добавление предложения». Поскольку DELETE в любом случае требует предложения FROM, это может означать только то, что оператор DELETE может принимать два предложения FROM. Но в примере DELETE есть только одно предложение FROM, так о чем же речь? — Smjg ( talk ) 21:39, 26 июля 2019 (UTC) Было бы неплохо указать даты, когда он был выпущен, версии и т. д. -- 86.14.120.74 (обсуждение) 17:15, 21 апреля 2012 (UTC)