具有 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
我正在尝试使用从数据库 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