通过开发应用程序。我需要一个动态存储过程,我在这里调用一个表名(@pxxx),并且我还需要传递相同的参数 - 这里我有2(datum,por)。 它运行良好,通过tablename作为@pxxx - o.k.另外,当参数datum,por是类型-int或varchar,或char或它的组合时。诠释我改变为varchar通过CONVERT - 过程进展顺利。以及从C#调用。 问题是我将参数-datum更改为datetime。它不工作。改变日期“转换”为varchar没有帮助。它在sql管理工作室中不起作用。我需要解决一个问题,因为我需要在表数据[日期时间], 我不能更改表定义,需要datetime。 我查找几乎所有关于传递参数和动态SQL存储过程的问题,但我找不到解决方案。在MS SQL 2005SQL Server存储过程参数 - 不同类型
表定义:
CREATE TABLE [dbo].[p001](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[datum] [datetime] NULL,
[por] [int] NULL,
[cas] [nchar](5) NULL,
[max] [int] NULL,
[obsad] [int] NULL,
[blok] [bit] NULL
one of it) ON [PRIMARY]
我的存储过程 - 不工作
ALTER PROCEDURE [dbo].[SPinsertpxx2] (@pxxx nchar(4),@date datetime, @por int)
AS
DECLARE @sqlCommand varchar(500)
SET @sqlCommand = 'INSERT INTO '+ @pxxx +' ([datum],[por]) VALUES('
+CONVERT(VARCHAR,@date,112)+','+CONVERT(VARCHAR,@por,5)+')'
BEGIN
EXEC (@sqlCommand)
END
此存储过程 - 运作良好但只有withous日期时间参数。
ALTER PROCEDURE [dbo].[SPinsertpxxx] (@pxxx nchar(4),@cas nvarchar(10), @por int)
AS
DECLARE @sqlCommand varchar(500)
SET @sqlCommand = 'INSERT INTO '+ @pxxx +' ([cas],[por]) VALUES('
+CONVERT(VARCHAR,@cas)+','+CONVERT(VARCHAR,@por)+')'
BEGIN
EXEC (@sqlCommand)
END
没有帮助,所以114,或改变语言为英国。 –
错误信息>从字符串转换日期时间时失败。 我读的地方在动态SQL命令必须是字符串(varchar)。因此,我通过CONVERT(VARCHAR,@参数)转换每个参数,它对int有帮助,但不支持datetime –
这里有几个问题。首先,你应该参数化你的动态sql来帮助防止sql注入。你也转换为varchar,但不指定长度。我的问题是,如果你插入到日期时间列为什么你传递一个varchar?您还需要定义“不工作”。那是什么意思? –