收录日期:2019/02/16 20:13:57 时间: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 字符串。
注意上面变量的类型

51job那样的弹出层 各位兄弟有没有extjs 或者 jquery的例子发给小弟。谢谢分全给你 LOG日志问题 我的dnw.exe总报内存错误不能用了,谁有最新版DNW.exe或者源程序?? CSDN的广告可信否? 向窗体中输入一个浮点数并显示出来,大家有什么方法?多谢! Struts2初级异常问题 离开页面时执行update语句 我有一些开源的代码怎么在自己的Linux下编译 单线程 多线程 同步 异步四个概念放在一起如何理解? 这样的能升本吗? 求教高手:Hibernate级联删除 mysql数据库 2440开发板GPIO定义如何查看 后花园记事 郁闷,居然提示“使用了未赋值的局部变量” 使用索引,执行计划中显示的成本请高手解答 提个比较低级的问题。如何在vc++6.0的control工具箱中删除自己加载的控件。 C#中结构体指针到底怎么用啊? 嵌入式开发最基本的问题 winform、webform和B/S 、C/S的关系? 怎么判断哪些物体在可见范围之内? Cross-thread operation not valid错误——多线程问题 sqlite create table時是否能設定資料型態或長度呢 从“ULONGLONG”转换到“DWORD”,可能丢失数据 给 kaily1985 童鞋散分。。。 求大师指点..!! VC 写的计算器中如何在按下“=”键之后如果再按数字键时,清空原来显示框中的内容?? 求FTP_628步进电机的程序??急急 SharpPcap,谁知道比较详细 求教高手如何监控Tomcat连接池中的连接状态?