我需要像这样的动态查询sp,
声明@query nvarchar(max)=‘声明@DateParam日期时间设置@DateParam = getdate()从tblOrders中选择*其中Order_site =’ TSN </跨度> “ANDCAST (ORDER_APPROVED_DATE_LT AS DATE)= CAST(GETDATE()AS DATE)’
在写这样的时候我收到了报价部分’ TSN </跨度> ”。它不允许单引号。我怎样才能达到哪里的条件?
如果你在存储过程中使用动态sql尝试这样的事情。最好为主选择查询和动态使用不同的变量,其中查询可以很容易地扩展。使用这种方法,当proc变得冗长时,它将很容易维护
declare @finalquery varchar(max) declare @mainSelectquery nvarchar(500); declare @whereCondtions varchar (1000); declare @DateParam datetime set @mainSelectquery='' set @whereCondtions ='' set @finalquery ='' set @DateParam=getdate() set @mainSelectquery = 'select * from tblOrders where 1=1 ' set @whereCondtions = ' and Order_site =''TSN''' set @whereCondtions = @whereCondtions + ' AND CAST(ORDER_APPROVED_DATE_LT AS DATE)=CAST(GETDATE() AS DATE)' set @finalquery =( @mainSelectquery + @whereCondtions) print @finalquery ---- You can further extend this by adding more where condition based on the parameter pass in stored proc if (@OrderID !=0) begin set @whereCondtions = ' OrderID='+str ( @stateRefID ) end
问题是你因为“TSN”而破坏你的主要nvarchar,试试这样
declare @query nvarchar(max)=' declare @DateParam datetime set @DateParam=getdate() select * from tblOrders where Order_site=' + 'TSN' + 'AND CAST(ORDER_APPROVED_DATE_LT AS DATE)=CAST(GETDATE() AS DATE)'
你需要将它构建为一个字符串。
declare @query nvarchar(max)=' declare @DateParam datetime set @DateParam=getdate() select * from tblOrders where Order_site=''TSN'' AND CAST(ORDER_APPROVED_DATE_LT AS DATE)=CAST(GETDATE() AS DATE)'
作为使用双引号转义字符串的替代方法,您可以尝试使用 的 QUOTENAME() 强> :
declare @val nvarchar(max) = 'TSN' declare @query nvarchar(max)=' declare @DateParam datetime set @DateParam=getdate() select * from tblOrders where Order_site= ' + quotename(@val, '''') + ' AND CAST(ORDER_APPROVED_DATE_LT AS DATE)=CAST(GETDATE() AS DATE)' select @query