通過開發應用程序。我需要一個動態存儲過程,我在這裏調用一個表名(@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?您還需要定義「不工作」。那是什麼意思? –