CREATE PROCEDURE usp_GetStateInfo
@state varchar(2)
SELECT * FROM StateTable WHERE state IN (@state)
에서 각 상태에 대한 모든 데이터를 반환하지만 내가 오류가 내가 잘못 뭐하는 거지 '의 구문이 잘못되었습니다' 말을 얻을 수 위의 코드를 할 때 나는이 문제를 어떻게 해결할 수 있습니까?
는CREATE PROCEDURE usp_GetStateInfo
@state varchar(2)
SELECT * FROM StateTable WHERE state IN (@state)
에서 각 상태에 대한 모든 데이터를 반환하지만 내가 오류가 내가 잘못 뭐하는 거지 '의 구문이 잘못되었습니다' 말을 얻을 수 위의 코드를 할 때 나는이 문제를 어떻게 해결할 수 있습니까?
는당신이 문에 대한 매개 변수로 여러 개의 입력을 사용할 수 없습니다 감사합니다. 이러한 쉼표로 구분 된 값을 SQL로 분할하여 테이블 변수를 만들고 해당 테이블 변수와 결합해야합니다.
당신은 분할 입력 문자열에 대한 기능을 만들 수 있습니다: -
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[udf_PutStringtoTableUnique]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[udf_PutStringtoTableUnique]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE function [dbo].[udf_PutStringtoTableUnique]
(
@inputStr as varchar(max),
@delim nchar(1) = N','
)
returns @tbl table(ID int primary key)
as
BEGIN
if @inputStr = '' or @inputStr is null
return
declare @tags nchar(2)
set @tags = @delim + @delim;
with tbl_for_csv as
(
select left(@inputStr + @tags,charindex(@delim,@inputStr + @tags) -1)as Col,
right(@inputStr + @tags,len(@inputStr + @tags) - charindex(@delim,@inputStr + @tags)) as Str
union all
select left(Str,charindex(@delim,Str) - 1)as Col,
right(Str,len(Str) - charindex(@delim,Str)) from tbl_for_csv
where len(right(Str,len(Str) - charindex(@delim,Str))) > 0
)
insert into @tbl
select distinct Col from tbl_for_csv
option (maxrecursion 0)
return
END
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
을 다음 절차에서이 같은 쓰기 : -
DECLARE @TempStates Table (StateName Varchar(2))
INSERT INTO @TempStates
Select id from [dbo].[udf_PutStringtoTableUnique](@state, ',')
SELECT * FROM StateTable
INNER JOIN @TempStates temp ON state = temp.StateName
IN
연산자는 값의 인라인 목록 수락 또는 select
성명 SQL에는 고유 유형 list
변수가 없습니다. 그리고 확실하게 varchar(2)
은 작동하지 않습니다.
C#을 사용할 때 각 요소에 대해 저장 프로 시저를 호출하여 상태 목록을 반복하는 것이 좋습니다. 이 절차는 IN
대신 =
을 사용하여 상태를 필터링합니다.
프로 시저에 쉼표로 구분 된 값의 문자열을 허용하려면 SQL 명령을 사용하여 문자열을 분할하고 각 값을 임시 테이블이나 테이블 변수에 삽입 한 다음 select
문을 사용해야합니다. IN
을 사용하십시오.
T-SQL에서, 당신은 SQL Server에 대한 STRING_SPLIT()
이 할 수있는 2016 https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql
SELECT *
FROM StateTable
WHERE state IN(
SELECT value
FROM STRING_SPLIT(@states, ','))
사용 따옴표 : " 'AZ', 'CA', 'VA'" – Odrai
당신이있어 가정 말하는 SQL 서버 (T-SQL)? 프로 시저를 호출하기위한 현재 코드는 무엇입니까? –
거기에 인터넷에 예제뿐만 아니라 SQL에 예약어'IN'를 사용하는 방법에 관해서는 당신이 Google 검색을 했어 ..? – MethodMan