具有 SQL 服务器存储过程的变量内部变量

Variable inside variable with SQL Server stored procedure

我正在尝试使用从数据库 table 中获取的动态 where 子句创建一个 select 语句,并包含一个需要用此值替换的变量变量也取自数据库 table.

DECLARE 
    @SelectStatement nvarchar(max),
    @BCPCommand varchar(8000),
    @WhereClause nvarchar(250),
    @WhereValue nvarchar(50)

SELECT @SelectStatement = SELECTSTATEMENT,  @WhereClause = WHERECLAUSE 
FROM [table1] 
WHERE ID =  @ID

SELECT @WhereValue = WHEREVARIABLEVALUE 
FROM [table2] 
WHERE ID = @ID

IF (NOT @WhereClause IS NULL)
BEGIN
    SET @SelectStatement = @SelectStatement + ' WHERE (' + @WhereClause + ')'
END

SET @BCPCommand = 'BCP "' + @SelectStatement + '" queryout C:\temp\test.txt -T -c /t"|"'
EXEC master..xp_cmdshell @BCPCommand

@WhereClause 将包含例如

STARTDATE > @WhereValue OR MODIFICATIONDATE > @WhereValue

@WhereValue 例如“2020-06-21”。

例如@SelectStatement

SELECT * FROM DummyTable

如何在 WHERECLAUSE 中获取 WHEREVARIABLEVALUE 的值,以便 @SelectStatement 将变为:

SELECT * 
FROM DummyTable 
WHERE STARTDATE > '2020-06-21' OR MODIFICATIONDATE > '2020-06-21'

您应该能够快速调用 REPLACE() 来替换内部变量。

IF (NOT @WhereClause IS NULL)
BEGIN
    SET @WhereClause = REPLACE(@WhereClause,'@WhereValue',Char(39) + @WhereValue + Char(39))
    SET @SelectStatement = @SelectStatement + ' WHERE (' + @WhereClause + ')'
END