У меня есть процедура, над которой я работаю, и я не знаю, что происходит. Я просмотрел все другие сайты и не смог найти проблему, что у меня естьДинамическое имя столбца и значение в месте где
Я хочу создать процедуру, которая имеет динамическую базу предложений where на комбинации бит, отправляемых в процедуру. Я не хочу создавать кучу подобных процедур, потому что они имеют несколько иные условия.
Я помещаю следующий запрос в курсор, а затем перебираю курсор. Пожалуйста помоги.
CREATE PROCEDURE [dbo].[procContainTest] (
@USE_A BIT,
@USE_B BIT,
@ValueA VARCHAR(50),
@ValueB VARCHAR(50),
@USERID VARCHAR(50)
)
AS
DECLARE @TEMP_Col1 INT,
@TEMP_Col2 INT,
@TEMP_Col3 VARCHAR(50),
@TEMP_Col4 VARCHAR(50),
@TEMP_Col5 VARCHAR(50),
@POINT_ONE NVARCHAR(50),
@POINT_TWO NVARCHAR(50)
SET @TRIGGER = 0
WHILE @TRIGGER = 0
BEGIN
-- F2 Booking Term
IF @USE_A = 1
AND @USE_B = 1
BEGIN
SET @POINT_ONE = 'ColName2'
SET @POINT_TWO = 'ColName3'
END
-- F6 Booking Term
IF @USE_A = 0
AND @USE_B = 1
BEGIN
SET @POINT_ONE = 'ColName1'
SET @POINT_TWO = 'ColName2'
END
DECLARE INNER_CURSOR CURSOR
FOR
SELECT TOP 1 TEMP_Col1 INT,
TEMP_Col2,
TEMP_Col3,
@TEMP_Col4,
@TEMP_Col5
FROM TEMP_Table
WHERE @POINT_ONE = + '''' + @ValueA + ''''
AND @POINT_TWO = + '''' + @ValueB + ''''
AND USERID = @USERID
ORDER BY LENGTH
Вам необходимо использовать динамический SQL, чтобы добиться этого, не могут иметь переменные, представляющие имена столбцов. sql не предназначен для работы. Ознакомьтесь с этой статьей для получения дополнительной информации о динамическом sql: http://www.sommarskog.se/dynamic_sql.html. – Mack
Вам нужно будет использовать динамический SQL, чтобы делать то, что вы пытаетесь сделать. То есть объявить оператор SELECT как varchar, а затем выполнить команду с параметрами. Наконец, вы вызываете 'sp_executesql' для выполнения полной команды. – SchmitzIT
Я видел этот вопрос. Это не сработает. [StackOverflow] http://stackoverflow.com/questions/12093834/creating-a-dynamic-where-clause-in-sql-server-stored-procedure – user3066155