私は、日付の複数値のパラメータを受け入れるストアドプロシージャを取得しようとしています。これは、SSRSではありませんが、私は、私はそれを行うのと同じアプローチを使用しようとしている:SSRSのINTとVARCHARフィールドは複数の値のパラメータを報告してストアドプロシージャの複数値の日付パラメータ?
ALTER PROCEDURE spSelectPlacementData
(
@ClientID SMALLINT,
@SourceFileDates VARCHAR(MAX)
)
AS
BEGIN
SELECT (snip)
FROM [APS].[dbo].[Account] A
WHERE ClientID = @ClientID
AND A.[SourceFileDate] IN (SELECT * FROM dbo.Split(@SourceFileDates))
END
私はこのアプローチを使用しています。
string sourceFileDates = "";
foreach (DateTime file in job.sourceFiles)
{
if (file == job.sourceFiles.Last())
{
sourceFileDates += "'" + file.ToString("d") + "'";
}
else
{
sourceFileDates += "'" + file.ToString("d") + "', ";
}
}
selectRunCommand = new SqlCommand("spSelectPlacementData", sqlConnection);
selectRunCommand.CommandType = CommandType.StoredProcedure;
selectRunCommand.Parameters.Add("@ClientID", SqlDbType.SmallInt);
selectRunCommand.Parameters["@ClientID"].Value = job.clientID;
selectRunCommand.Parameters.Add("@SourceFileDates", SqlDbType.VarChar);
selectRunCommand.Parameters["@SourceFileDates"].Value = sourceFileDates;
を私はオンラインつかんだこのdbo.Split機能を使う::
/****** Object: UserDefinedFunction [dbo].[Split] Script Date: 09/20/2011 11:16:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Split]
/* This function is used to split up multi-value parameters */
(
@ItemList VARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(MAX) collate database_default)
AS
BEGIN
DECLARE @tempItemList VARCHAR(MAX)
SET @tempItemList = @ItemList
DECLARE @i INT
DECLARE @Item VARCHAR(MAX)
SET @tempItemList = REPLACE (@tempItemList, @delimiter + ' ', @delimiter)
SET @i = CHARINDEX(@delimiter, @tempItemList)
WHILE (LEN(@tempItemList) > 0)
BEGIN
IF @i = 0
SET @Item = @tempItemList
ELSE
SET @Item = LEFT(@tempItemList, @i - 1)
INSERT INTO @IDTable(Item) VALUES(@Item)
IF @i = 0
SET @tempItemList = ''
ELSE
SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
SET @i = CHARINDEX(@delimiter, @tempItemList)
END
RETURN
END
私は完全には明らかではないと思うよ。ここ
は私がSourceFileDatesを連結するために使用しているコードです。どのようにパラメータをフォーマットするか、類似のパラメータ(これは私がコードからやってみた唯一のものです)、および日付データ型が必要な書式設定にどのように影響を与えるかは異なります。文字列から日付や時刻を変換すると変換に失敗しました。複数の値を選択するとエラーが発生します。
編集:要求されたように、foreachループの出力例:
'2011年9月9日'、 '2011年8月19日'、 '2011年8月12日'
foreachループの後のsourceFileDatesの値を表示 – Icarus