收录日期:2019/04/24 20:36:35 时间: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 字符串。
注意上面变量的类型

请问!怎么样获取datalist里面的控件? C# ASP.NET C# 鼠标移到dataGridView1 上 显示cell的内容 sdcard权限 求助 发送消息不调用request回调函数,可能原因是什么 近来用ASP.NET做了个站,放到服务器上,运行一会就打不开aspx页面了 c#开发导出数据库查询出来的数据 CMap怎么求Key的最大值,不用遍历的方法有没有? 怎么让超链接不可用 当输入正确时变正常 (java)现有一个开关功能,如何开启一个开关后,定时执行一项任务了? 个人的短暂历程,以及请教c#学法 关于读串口的问题 国产的规则引擎在哪里? 如何把编辑文件的二进制位呢? 关于cache添加的一段代码~ 看不懂 求助 ASP.NET操作 EXCEL后进程无法结束 求救,大文本文件要高效的插入到数据库? 关于wireshark的dissector入口的问题 本人在写个日历程序,需要调用系统底层api函数GetSystemTime 今天在校内看到C++主页发现了一个关于构造函数的程序,我没搞明白,特来求助 SQL server 2008 请问哪里有Ubuntu linux下的Mysql下载,给个可用的链接 囧啊:西安电视台女记者误将自慰器作为肉灵芝报到...... 大家有谁懂JS或JQUERY的,帮忙解释一下下面的这段语句! 【基础问题】复位电路疑问?? snmp源码安装后一次只能处理一个查询 liunx 屏保问题 gridview 点击图片上出现下载百分比 android ? Data source name not found and no default driver specified [已答复]定义博客模板栏目不起作用? 求加工工艺布置算法或方案,数学好的请进来