1
CREATE PROCEDURE Usp_insertgender 
    (@gendervalues VARCHAR(MAX)) 
AS 
BEGIN 
    INSERT INTO sparsha.dbo.Genders ([GenderName]) 
    VALUES @gendervalues; 
END 

SQL Server의 저장 프로 시저를 사용하지만 오류를 얻고있다 하나의 쿼리에서 여러 행을 삽입하는이 어떻게 위의 절차를 시도

메시지 102, 수준 15, 상태 1, 프로 시저 Usp_insertgender, 줄 10
'@gendervalues'근처의 구문이 잘못되었습니다.

CREATE TYPE myTVPType AS TABLE(v VARCHAR(50)); 
GO 

CREATE PROCEDURE Usp_insertgender (@gendervalues myTVPType READONLY) 
AS 
BEGIN 
    INSERT INTO sparsha.dbo.Genders ([GenderName]) 
    SELECT v 
    FROM @gendervalues; 
END; 

를 호출하는 방법 : 나는 ('1')로 @gendervalues 값을 전달하고

는 ('2')

답변

3

아마 가장 쉬운 방법은 TVP을 정의하는 것입니다 :

DECLARE @tvp AS myTVPType; 

INSERT INTO @TVP (v) 
VALUES ('1'),('2'); 

EXEC Usp_insertgender @TVP; 
GO 
+0

(1), (2) 근처의 구문이 잘못 Usp_insertgender을 실행 절차지고 오류를 실행하고 '1'. – guna

+0

안녕하세요 lad2025 프로 시저 호출 방법에 대한 솔루션을 제공해 주셔서 감사합니다. plz는 매개 변수를 ('1'), ('2')로 지정하고 여러 값을 삽입하여 저장 프로 시저에서 호출하는 방법에 대한 해결책을 제공합니다. 여기에 문제는 삽입 위의 다른 삽입 쿼리에 따라 달라집니다. – guna

+0

'('1'), ('2')와 같이 매개 변수를주는 것으로 볼 수있는 유일한 방법은 동적 SQL이지만 거대한 반 패턴으로 여기에 제시 할 수 있습니다. – lad2025

0

다음을 시도해보십시오. (동적 S QL)

CREATE PROCEDURE Usp_insertgender 
    (@gendervalues VARCHAR(MAX)) 
AS 
BEGIN 
    DECLARE @sql nvarchar(2000) 

    SET @sql = N'INSERT INTO sparsha.dbo.Genders ([GenderName]) 
    VALUES ' + @gendervalues 

    EXEC sp_executesql @sql 
END 
+0

감사합니다. – guna

+0

@guna : 안녕하세요, 두 가지 좋은 답변을 받았습니다. 그들 중 하나를 받아주십시오. –

+0

[SQL 주입] (http://bobby-tables.com/)의 가능성에 주목할 가치가 있습니다. – HABO