我正在尝试在以下SQL中使用变量tablename,但我一直在
必须声明标量变量@Projectnr
从C#程序执行。
这些值是由程序传递的,我确定这是在这个SQL的某个地方混淆了......
这是SQL:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_Insert_ProjectWerktijden]
@Projectnr VARCHAR(50),
@Tasknr VARCHAR(50),
@Datum DATETIME,
@Startuur DATETIME,
@Einduur DATETIME,
@WerktijdDEC float,
@TijdTijd DATETIME,
@Scanner VARCHAR(50),
@StartID int,
@EindID int,
@Functiecode int,
@Naam varchar(100),
@table NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON
DECLARE @sql NVARCHAR(MAX)
SET @sql= 'INSERT INTO **TABLE**
(
Projectnr,
Taaknummer,
Datum,
Start,
Einde,
Tijd,
TijdTijd,
Scanner,
StartID,
EindID,
Functiecode,
Naam
)
VALUES
(
@Projectnr,@Tasknr,@Datum,@Startuur,@Einduur,@WerktijdDEC,@TijdTijd,@Scanner,@StartID,@EindID,@Functiecode,@Naam
)
';
SET @sql = REPLACE(@sql, '**TABLE**', @table);
EXECUTE(@sql);
END
和C#代码
public static void TijdSaven(string projectnr, string tasknr, DateTime datum, DateTime? start, DateTime? einde, double tijd, DateTime tijdtijd,string scanner, int beginid, int eindid,int functiecode,string naam,string table)
{
if (tasknr.Contains("X")) { tasknr = "n.v.t.";}
ctx = new DataClassesDataContext();
ctx.sp_Insert_ProjectWerktijden(projectnr, tasknr, datum, start, einde, tijd, tijdtijd, scanner, beginid, eindid,functiecode,naam,table);
ctx.SubmitChanges();
}
答案 0 :(得分:5)
如果在执行之前执行PRINT(@sql)
,您将看到要运行的查询是:
INSERT INTO **TABLE**
(
Projectnr,
Taaknummer,
Datum,
Start,
Einde,
Tijd,
TijdTijd,
Scanner,
StartID,
EindID,
Functiecode,
Naam
)
VALUES
(
@Projectnr,@Tasknr,@Datum,@Startuur,@Einduur,@WerktijdDEC,@TijdTijd,@Scanner,@StartID,@EindID,@Functiecode,@Naam
)
在此查询中,您的变量没有声明,这就是您收到错误的原因。
而不是EXECUTE(@sql);
更好地使用参数:
DECLARE @ParmDefinition nvarchar(MAX);
SET @ParmDefinition = N'
@Projectnr VARCHAR(50),
@Tasknr VARCHAR(50),
@Datum DATETIME,
@Startuur DATETIME,
@Einduur DATETIME,
@WerktijdDEC float,
@TijdTijd DATETIME,
@Scanner VARCHAR(50),
@StartID int,
@EindID int,
@Functiecode int,
@Naam varchar(100)
';
--I guess table name must be replaced, you cannot use parameter for that one
SET @sql = REPLACE(@sql, '**TABLE**', QUOTENAME(@table));
EXEC sp_executesql @sql, @ParmDefinition,
@Projectnr = @Projectnr,
@Tasknr = @Tasknr,
@Datum = @Datum,
@Startuur = @Startuur,
@Einduur = @Einduur,
@WerktijdDEC = @WerktijdDEC,
@TijdTijd = @TijdTijd,
@Scanner = @Scanner,
@StartID = @StartID,
@EindID = @EindID,
@Functiecode = @Functiecode,
@Naam = @Naam
更多信息here。