收录日期:2019/08/19 20:52:20 时间:2016/05/30 10:06:06 标签:应用实例
语句:EXECUTE ('INSERT INTO Game_UserLogs_' + @Issue + ' (Username,Price,PresentID,PostTime,UserIp) VALUES ('''+@UserName+''','+@price+','+@PresentID+','''+@PostTime+''','''+@UserIp+''')')执行后
PostTime获得了一个被四舍五入为最接近的分钟数。
请大虾们帮忙指点一二。如何把秒数传入。

以下是触发器代码:

CREATE TRIGGER InsertLogs ON dbo.Game_UserLogs 
FOR INSERT
AS
BEGIN
DECLARE @UserName varchar(50),@Price decimal(10,2),@Issue varchar(50),@PresentID int,@PostTime datetime,@UserIp varchar(50)
SELECT @UserName=UserName,@Price=Price,@Issue=Issue,@PresentID=PresentID,@PostTime=PostTime,@UserIp=UserIp FROM inserted
EXECUTE ('INSERT INTO Game_UserLogs_' + @Issue + ' (Username,Price,PresentID,PostTime,UserIp) VALUES ('''+@UserName+''','+@price+','+@PresentID+','''+@PostTime+''','''+@UserIp+''')')

END
不明白你的意思,请你举个例子.
EXECUTE ('INSERT INTO Game_UserLogs_' + @Issue + ' (Username,Price,PresentID,PostTime,UserIp) VALUES ('''+@UserName+''','+@price+','+@PresentID+','''+@PostTime+''','''+@UserIp+''')')

比如变量@PostTime是2004-10-01 12:12:12

但是在数据库里增加的PostTime字段的数据却是2004-10-01 12:12:00  秒数都被变位0了,精确到了分钟。
看看你数据库里的字段长度是否够长
绝对够长,是datetime类型的,不然就不会显示12:12:00了,,直接显示12:12
把这个改为字符型应该就可以了
@PostTime varchar(50)
你字段里是字符型的?


-----------
如果你用日期型的插入,字段里也应该要日期型的,
如果你字段里的是字符型的,插入也应该用字符型,
要不然,系统转化的时候,就会出现上面的现象
字段是日期型的,前面你的方法还是不行,我估计是sql把我那@PostTime变量认识成了字符型,附值时转成datetime类型后自动精确到分钟,有什么方法可以解决吗?真是急啊。
--测试
create table tn(id datetime)
declare @a datetime
set @a='2004-10-01 12:12:12'
insert into tn values( @a)
select * from tn

--结果
2004-10-01 12:12:12.000

--没错啊


把你那个触发器相关的表结构和数据帖出来看看
触发器:
CREATE TRIGGER InsertLogs ON dbo.Game_UserLogs 
FOR INSERT
AS
BEGIN
DECLARE @UserName varchar(50),@Price decimal(10,2),@Issue varchar(50),@PresentID int,@PostTime datetime,@UserIp varchar(50),@PostTimeV datetime
SELECT @UserName=UserName,@Price=Price,@Issue=Issue,@PresentID=PresentID,@PostTime=PostTime,@UserIp=UserIp FROM inserted
EXECUTE ('INSERT INTO Game_UserLogs_' + @Issue + ' (Username,Price,PresentID,PostTime,UserIp) VALUES ('''+@UserName+''','+@price+','+@PresentID+','''+@PostTime+''','''+@UserIp+''')')
END

表Game_UserLogs
3 Id int 4 0
0 UserName varchar 50 1
0 Price decimal 9 1
0 Issue varchar 50 1
0 PresentID int 4 1
0 PostTime datetime 8 1
0 UserIp varchar 50 1


表Game_UserLogs_2004001
3 Id int 4 0
0 UserName varchar 50 1
0 Price decimal 9 1
0 PresentID int 4 1
0 PostTime datetime 8 1
0 UserIp varchar 50 1

执行INSERT INTO Game_UserLogs ()VALUES()

Game_UserLogs获得的时间值是完整的。
刚刚你的测试
create table tn(id datetime)
declare @a datetime
set @a='2004-10-01 12:12:12'
insert into tn values( @a)
select * from tn

换成我这个就不行了,你用的命令和我不一样。

declare @a datetime
set @a='2004-10-01 12:12:12'
EXECUTE('insert into tn values( '''+@a+''')')
select * from tn

--结果
2004-10-01 12:12:00.000
看来问题就出在exec这里,我试验一下
declare @a varchar(50)
set @a='2004-10-01 12:12:12'
EXECUTE('insert into tn values( '''+@a+''')')
select * from tn

--这样得到的是2004-10-01 12:12:12.000


--在execute中,运行的时候,如果@a为时间型的,运行的时候,可能要转为字符型,
还是没有最后解决,我传递过来的是时间型的变量,有没有办法输出'2004-10-01 12:12:12'这样格式的字符型数据?
动态SQL,就是说execute后面必须跟一个完整的字符串,显然'INSERT INTO Game_UserLogs_' + @Issue + ' (Username,Price,PresentID,PostTime,UserIp) VALUES ('''+@UserName+''','+@price+','+@PresentID+','''+@PostTime+''','''+@UserIp+''')'的结果不是个显示的字符串,这样SQL SERVER 就使用其默认的规则隐含的转化了,此过程造成秒数丢失,所以你必须显示的转换成字符串然后执行EXECUTE 就OK,就想"无尽天空"的演示代码说明了这个过程
declare @a varchar(50)
set @a='2004-10-01 12:12:12'
EXECUTE('insert into tn values( '''+@a+''')')
select * from tn

--这样得到的是2004-10-01 12:12:12.000
----------------------------------------------------
就是说程序要严谨
你们还没有明白我最后的问题,就是如何把一个@PostTime datetime变量转换成完整的日期格式字符变量??比如用什么函数?
函数convert,简单的很
怎么使用自己查帮助了
EXEC [ UTE ] ( { @string_variable | [ N ] 'tsql_string' } [ + ...n ] )

@string_variable

是局部变量的名称。@string_variable 可以是 char、varchar、nchar 或 nvarchar 数据类型,最大值为服务器的可用内存。如果字符串长度超过 4,000 个字符,则把多个局部变量串联起来用于 EXECUTE 字符串。有关系统提供的 SQL Server 数据类型更多的信息,请参见数据类型。 

[N]'tsql_string'

是一个常量,tsql_string 可以是 nvarchar 或 varchar 数据类型。如果包含 N,则该字符串将解释为 nvarchar 数据类型,最大值为服务器的可用内存。如果字符串长度超过 4,000 个字符,则把多个局部变量串联起来用于 EXECUTE 字符串。
注意上面变量的类型

分隔字符串 请教一个sql查询 找到了几位,回帖速度的实力派选手 怎么样弄一个不规则的圆柱体 C# Winform下数字转换和排序问题 关于dictionary过大,造成内存溢出的解决方法 连不上数据库 在线 vs 2008 自动保存 SWING怎么实现可扩展的表格 下载Rational Modeling Extension试用版,却遇到IBM注册问题 请问哈成都的培训学校的情况 Jquery checktree 怎么动态取数据啊???高手请帮帮小弟 询问前辈 北京.NET WEB开发两年经验之后 php如何获取客户端浏览器类型 MSDN Windows 7 Ultimate (x86) - DVD (English) +中文语言包官方下载地址 怎样用TableViewer根据数据库中表的具体结构自动显示在数据? 初学Java的第一件事是干嘛? 有没有人认识我? StringGrid的内容和数据集比较结果在DBGridEh中显示出来. 页面A用showModalDialog弹出了页面B,页面B用open方法弹出了页面C,请问如何在页面C里用代码刷新页面A system.data.datatable 中的 newrow()方法是怎么实现的? 如何将MPEG Layer-3 Decoder设置默认MP3解码器 Asp.net页面按提交按钮后,FreeTextBox取到的还是旧的值,无法取到新值,怎么回事? 求库存. 怎样用表格控件根据数据库中表的具体结构自动显示数据? 关于mediawiki的搜索问题PHP+MYSQL (高分)为何在局域网内连接别一台SQL查询速度很慢 马甲...要慢慢的热~ 菜菜鸟的问题苦闷... ASP程序 求思路