Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 20.06.2017, 11:26   #1
artemavd
Модератор
Заслуженный модератор
 
Регистрация: 05.06.2008
Адрес: г.Иркутск
Сообщений: 4,158
Репутация: 819
Вопрос Передача даты и времени в хранимую процедуру в 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 Кб, 15 просмотров)
__________________
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума   Ответить с цитированием
Старый 20.06.2017, 11:39   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,990
Репутация: 6304
По умолчанию

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

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

SET @s = 'UPDATE [dbo].[' + @DICT + '] SET [ПолеДата]  = ' + GetutcDate() + ' WHERE ID = ' + @IDZ

Функция GetutcDate() или GetDate() и обновить значение даты.
__________________
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума   Ответить с цитированием
Старый 20.06.2017, 11:46   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,990
Репутация: 6304
По умолчанию

Код:

SET @s = 'UPDATE [dbo].[' + @DICT + '] SET [ПолеДата]  = GetutcDate() WHERE ID = ' + @IDZ

Если хочешь как у себя, то результат GetutcDate() нужно представить в символьном виде, с помощью CONVERT например
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

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

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:

SET @s = 'UPDATE [dbo].[' + @DICT + '] SET [ПолеДата]  = GetutcDate() WHERE ID = ' + @IDZ

Если хочешь как у себя, то результат GetutcDate() нужно представить в символьном виде, с помощью CONVERT например
Это как? Что-то не понял..Разве GetutcDate() не дает этот эффект?
__________________
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума   Ответить с цитированием
Старый 20.06.2017, 12:07   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,990
Репутация: 6304
По умолчанию

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

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

Почему у меня работает?
Код:

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, 12:52   #9
artemavd
Модератор
Заслуженный модератор
 
Регистрация: 05.06.2008
Адрес: г.Иркутск
Сообщений: 4,158
Репутация: 819
По умолчанию

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


00:45.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru