如何使用带有“插入”命令的N有“?”作为变量

时间:2016-10-05 15:16:00

标签: sql sql-server

通常在下面使用N.

INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (1000,N'test'),(1001,N'test2')

但如何在

中表达N
INSERT INTO [MyDB].[dbo].[MyTable]
       ([FieldID]
       ,[Description])
 VALUES
       (?,?),(?,?)

1 个答案:

答案 0 :(得分:3)

SQL Server不使用?作为参数,这是您通常在Ole数据源中找到的内容(请参阅OLE DB Source),它们通常也是位置特定的(序数)。

对于SQL Server,使用带有@前缀的名称作为参数。它们总是被命名,名称应该是唯一的。每个参数也必须是特定类型。对于包含Unicode文本的参数,请使用SQL Server类型NVarCharN'text'通常表示NVarChar)并指定适当的长度。由于参数被命名为定义参数,因此参数在语句中占据的位置与第二个定义的参数可以在语句中第一个定义的参数之前使用无关。

您的示例重构:

-- define your parameters
DECLARE @p1 INT, @p3 INT
DECLARE @p2 nvarchar(1000), @p4 nvarchar(1000)

-- set your parameter values (note: this could be done on the same line as the declaration)
SET @p1 = 1
SET @p2 = N'some text'
-- etc.

INSERT INTO [MyDB].[dbo].[MyTable] ([FieldID], [Description])
VALUES (@p1, @p2), (@p3, @p4)

另见