将 SQL 语句作为参数发送到存储过程
Send a SQL-statement as a parameter to a stored procedure
我想知道是否有任何聪明的解决方案可以将整个 SQL 语句作为参数发送到已经包含日期参数的存储过程。
见下文。
CREATE procedure sp_GetDataByDate
@startdate datetime,
@enddate datetime,
@sqlStatement varchar(max)
as
begin
-- Here I want my SELECT-anything-somehow-statement
@sqlStatement
WHERE dbo.DummyDataTable.CreatedDT BETWEEN @startdate AND @enddate
end
首先采用 SQL 语句并使用该数据创建临时 table 以便稍后使用日期参数过滤出您想要的内容的解决方案可能有效,但它可能很重,因为它在这个数据库中有很多数据。
谢谢
您可以在 sql 服务器中使用具有此功能的 DQE(动态查询执行)您可以创建具有字符串功能的 TSQL 并执行它。
但此解决方案存在一些安全和性能问题。
在这种情况下,黑客可以使用 SQL 注入攻击来攻击您的站点,并且可能会在 sql 服务器上出现一些性能问题,例如计划捕获和参数嗅探。
最佳解决方案是创建不同的 SP 来加载信息。
CREATE PROCEDURE sp_GetDataByDate
@startdate datetime,
@enddate datetime,
@sqlStatement varchar(max)
AS
BEGIN
-- Here I want my SELECT-anything-somehow-statement
SET @sqlStatement +=' WHERE dbo.DummyDataTable.CreatedDT BETWEEN '+CHAR(39)+ CONVERT(NVARCHAR , @startdate , 120 )+CHAR(39)+ ' AND ' +CHAR(39)+ CONVERT(NVARCHAR , @enddate , 120 )+CHAR(39)
PRINT @sqlStatement
EXEC(@sqlStatement )
END
我想知道是否有任何聪明的解决方案可以将整个 SQL 语句作为参数发送到已经包含日期参数的存储过程。
见下文。
CREATE procedure sp_GetDataByDate
@startdate datetime,
@enddate datetime,
@sqlStatement varchar(max)
as
begin
-- Here I want my SELECT-anything-somehow-statement
@sqlStatement
WHERE dbo.DummyDataTable.CreatedDT BETWEEN @startdate AND @enddate
end
首先采用 SQL 语句并使用该数据创建临时 table 以便稍后使用日期参数过滤出您想要的内容的解决方案可能有效,但它可能很重,因为它在这个数据库中有很多数据。
谢谢
您可以在 sql 服务器中使用具有此功能的 DQE(动态查询执行)您可以创建具有字符串功能的 TSQL 并执行它。
但此解决方案存在一些安全和性能问题。
在这种情况下,黑客可以使用 SQL 注入攻击来攻击您的站点,并且可能会在 sql 服务器上出现一些性能问题,例如计划捕获和参数嗅探。
最佳解决方案是创建不同的 SP 来加载信息。
CREATE PROCEDURE sp_GetDataByDate
@startdate datetime,
@enddate datetime,
@sqlStatement varchar(max)
AS
BEGIN
-- Here I want my SELECT-anything-somehow-statement
SET @sqlStatement +=' WHERE dbo.DummyDataTable.CreatedDT BETWEEN '+CHAR(39)+ CONVERT(NVARCHAR , @startdate , 120 )+CHAR(39)+ ' AND ' +CHAR(39)+ CONVERT(NVARCHAR , @enddate , 120 )+CHAR(39)
PRINT @sqlStatement
EXEC(@sqlStatement )
END