[英]SELECT Cities in stored procedure
DECLARE @CityId AS VARCHAR(20) = NULL
DECLARE @CityList AS VARCHAR(20) = '1, 2, 3, 4, 5';
IF (@CityId IS NULL)
SET @CityId = @CityList;
SELECT *
FROM City
WHERE CityID IN (@CityId)
我有一個列出所有城市的存儲過程。 但是,如果設置了參數,則它應僅顯示有關該城市的特定信息。 “城市表”中的CityID為bigint。 當CityId保留為空時,它會顯示錯誤消息' 將數據類型varchar轉換為bigint時出錯。 “
注意:如果我構造以下查詢,則一切似乎正常。
SELECT * FROM City WHERE CityID IN (1, 2, 3, 4, 5)
但是,如果我繼續以下查詢,則會出現錯誤。
SELECT * FROM City WHERE CityID IN ('1, 2, 3, 4, 5')
我想在這種情況下我應該構造一個int數組,但是我不知道該怎么做。 有什么建議么?
您可以使用動態SQL
exec('SELECT * FROM City WHERE CityID IN (' + @CityId + ')')
嘗試這個:
IF (@CityId IS NULL)
SET @CityId = ',' + REPLACE(@CityList, ' ', '') + ',';
ELSE
SET @CityId = ',' + @CityId + ',';
SELECT *
FROM City
WHERE charindex(',' + CAST(CityID as nvarchar(20)) + ',', @CityId) > 0
DECLARE @CityId AS VARCHAR(20) = NULL
DECLARE @CityList AS VARCHAR(20) = '1, 2, 3, 4, 5';
IF (@CityId IS NULL)
SET @CityId = @CityList;
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N'
SELECT *
FROM City
where
1 = 1
AND Cityid in ('+@CityId+')
';
SELECT @SQL = @SQL + N' ';
EXEC Sp_executeSQL
@SQL
儲存程序
DELIMITER $$
DROP PROCEDURE IF EXISTS `mystoredprocedure`$$
CREATE PROCEDURE `mystoredprocedure`(IN city_id AS VARCHAR(20))
BEGIN
SET @CityId = city_id;
SET @where_condition = "";
IF (@CityId IS NULL) THEN
SET @where_condition = CONCAT(@where_condition,"1, 2, 3, 4, 5");
ELSE
SET @where_condition = @CityId;
END IF;
SET @query = CONCAT("SELECT * FROM City WHERE CityID IN (",@where_condition,")");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
通話聲明
CALL `mystoredprocedure`(NULL);
要么
CALL `mystoredprocedure`('1,2,3');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.