0

値の 1 つは列名と値です。
次のコードを試しました

create PROC SelectDynamic
@DateFrom DATETIME,
@DateTo DATETIME,
@ColumName NVARCHAR(50),
@ColumID INT
AS
DECLARE @Sql NVARCHAR(MAX)
SET @Sql=
'
SELECT
    *
FROM
    Ticket t 


WHERE t.TicketDate BETWEEN '+ @DateFrom +' AND' + @DateTo+' AND' + @ColumName +'='+ @ColumID

EXEC sp_executesql @Sql

それは私にこのエラーConversion failed when converting date and/or time from character string.
を与えます私はSQLの専門家ではありません、そしてそれは私にとって最初の動的SQLステートメントです
誰でも助けることができます

ありがとう!

4

5 に答える 5

2

動的クエリを作成するときは、引用符をエスケープする必要があります。

したがって、 @SQL 変数は次のようになります

SET @Sql= 'SELECT * FROM Ticket t WHERE t.TicketDate BETWEEN ''' + CAST(@DateFrom AS NVARCHAR) + ''' AND ''' + CAST(@DateTo AS NVARCHAR) + ''' AND ' + @ColumName +  '=' + CAST(@ColumID AS NVARCHAR) + ''

エスケープは、引用符を二重にすることによって行われます。

SELECT @SQLafter を実行して、クエリが正しく作成されたかどうかをテストできます。

于 2013-10-23T08:57:38.877 に答える
0
Try this

declare @DateFrom DATETIME=getdate(),
        @DateTo DATETIME=getdate(),
        @ColumName NVARCHAR(50)='A',
        @ColumID INT=1

DECLARE @Sql NVARCHAR(MAX)
SET @Sql=
'
SELECT
    *
FROM
    Ticket t 


WHERE t.TicketDate BETWEEN '''+ convert(varchar,@DateFrom,110) +''' AND ''' + convert(varchar,@DateTo,110)+''' AND ' + @ColumName +'='+ convert(varchar,@ColumID)


EXEC (@Sql)

SQL文字列を次のように作成します

SELECT      *  
FROM      Ticket t       
WHERE t.TicketDate BETWEEN '10-23-2013' AND '10-23-2013' AND A=1
于 2013-10-23T09:27:29.310 に答える