在sql SP中创建动态 [英] create Dynamic where in sql SP

查看:164
本文介绍了在sql SP中创建动态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个存储的一些值,其中一个值是列名和值。

我尝试了以下代码

I am trying to create a stored that will some values, one of the value is column name and a value.
I've tried the following code

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

它给我这个错误转换日期和/或时间从字符串转换失败。

我不是一个SQL专家,这是我第一个动态的sql语句

可以任何一个帮助

it give me this error Conversion failed when converting date and/or time from character string.
I am not a SQL expert, and it's me first dynamic sql statement
can any one help

谢谢!

推荐答案

在构建动态查询时,您必须转义引号。

You have to escape the quotation marks when building a dynamic query.

因此,您的@SQL变量应该是这个

Thus, your @SQL variable should be something like this

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) + ''

通过将引号加倍来完成转义。

Escaping is done by doubling the quotation marks.

您可以执行 SELECT @SQL ,以测试您的查询是否已正确构建。

You can do a SELECT @SQL after to test if your query has been built correctly.

这篇关于在sql SP中创建动态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆