Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2017, 10:26   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Передача даты и времени в хранимую процедуру в MS SQL

Продолжаю воевать с ХП в MS SQL
В таблице есть 2 поля (например):
ПолеДата (имеет тип datetime) и ПолеВремя (не знаю какой тип нужно).
Есть хранимая процедура:
Код:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[testHP] 
	-- Add the parameters for the stored procedure here
	@IDZ			int,
	@DICT	                varchar(255)
AS
BEGIN
	DECLARE @s varchar(2000)
	SET @s = 'UPDATE [dbo].[' + @DICT + '] SET [ПолеДата]  = ' + GetutcDate() + ' WHERE ID = ' + @IDZ
	EXEC(@s)

END
GO
Вот и вопрос: как правильно передавать в параметрах значение даты и время? Какие типы полей ставить при создании таблиц?
Изображения
Тип файла: png Снимок.PNG (2.4 Кб, 50 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2017, 10:39   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А как передаешь? И время отдельно почему? Там для времени с 2008-го тип данных time появился, но на зуб не пробовал, не скажу. Ну а вообще сиквел дату в виде '20170620' и дату-время в виде '20170620 10:37:00' съест, не подавится. Из делфи в параметризованном виде лучше конечно в формате даты-времени, пусть провайдер сам разбирается )). Но он в конечном счете все равно так представит, как выше в символьном виде )
Цитата:
Какие типы полей ставить при создании таблиц?
Естественно не символьного, а даты-времени
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.06.2017, 10:45   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А как передаешь? И время отдельно почему? Там для времени с 2008-го тип данных time появился, но на зуб не пробовал, не скажу. Ну а вообще сиквел дату в виде '20170620' и дату-время в виде '20170620 10:37:00' съест, не подавится. Из делфи в параметризованном виде лучше конечно в формате даты-времени, пусть провайдер сам разбирается )). Но он в конечном счете все равно так представит, как выше в символьном виде )Естественно не символьного, а даты-времени
Так я явно не передаю значение даты.
Я думал, что у меня в запросе:
Код:
SET @s = 'UPDATE [dbo].[' + @DICT + '] SET [ПолеДата]  = ' + GetutcDate() + ' WHERE ID = ' + @IDZ
Функция GetutcDate() или GetDate() и обновить значение даты.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2017, 10:46   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
SET @s = 'UPDATE [dbo].[' + @DICT + '] SET [ПолеДата]  = GetutcDate() WHERE ID = ' + @IDZ
Если хочешь как у себя, то результат GetutcDate() нужно представить в символьном виде, с помощью CONVERT например
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.06.2017 в 10:53.
Аватар вне форума Ответить с цитированием
Старый 20.06.2017, 11:00   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
SET @s = 'UPDATE [dbo].[' + @DICT + '] SET [ПолеДата]  = GetutcDate() WHERE ID = ' + @IDZ
Если хочешь как у себя, то результат GetutcDate() нужно представить в символьном виде, с помощью CONVERT например
Это как? Что-то не понял..Разве GetutcDate() не дает этот эффект?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2017, 11:07   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Какой эффект? Функция возвращает результат с типом datetime. Что бы засунуть в строку его нужно преобразовать в varchar например. И зачем универсальное время? Она вернет не твое время, да и дату тоже, а по-моему время нулевого меридиана, типа лондонского. Это нужно тебе?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.06.2017, 11:18   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Какой эффект? Функция возвращает результат с типом datetime. Что бы засунуть в строку его нужно преобразовать в varchar например. И зачем универсальное время? Она вернет не твое время, да и дату тоже, а по-моему время нулевого меридиана, типа лондонского. Это нужно тебе?
Ну, мне хотелось бы сохранять при добавлении информацию о дате и времени добавления записи в таблицу.
Так у меня поле в таблице имеет тип datetime и не работает твой код тоже...
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2017, 11:44   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Почему у меня работает?
Код:
DECLARE @s varchar(2000),
        @DICT varchar(100),
	@IDZ int
set @DICT = 'GdcSliv'
set @IDZ = 31
SET @s = 'UPDATE '+@DICT+' SET User_Date=GetutcDate() WHERE GdcSliv_Id=' + CAST(@IDZ as varchar(10))
EXEC (@s)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.06.2017, 11:52   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
GdcSliv_Id=' + CAST(@IDZ as varchar(10))
Что эта конструкция значит?))
И что такое GdcSliv?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.06.2017, 11:54   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Артем, та я на своей табличке проверил )) Совершенно случайно она и её поля не так называются как у тебя. И обрати внимание - идешку в символьный формат перевел из int
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.06.2017 в 11:56.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров в хранимую процедуру в MS SQL artemavd БД в Delphi 5 08.06.2017 06:49
sql форматирование времени/даты conflictogen PHP 3 22.09.2015 12:52
Не могу переделать хранимую процедуру Zicise Общие вопросы .NET 1 06.11.2014 18:09
Добавление пользователя через хранимую процедуру Muramidaza БД в Delphi 2 18.03.2014 22:41
добавление через хранимую процедуру пауэрлифтинг БД в Delphi 2 27.05.2010 16:21