[SQL] 함수 (SQL 서버) 내에서 동적 SQL을 실행할 때 오류를 얻기?
SQL함수 (SQL 서버) 내에서 동적 SQL을 실행할 때 오류를 얻기?
나는 동적 SQL을 실행하고 값을 반환하는 함수를 만들 수 있습니다. 나는 "오직 기능을 일부 확장 저장 프로 시저는 함수 내에서 실행할 수 있습니다."무엇입니까 오류로.
함수:
Create Function fn_GetPrePopValue(@paramterValue nvarchar(100))
returns int as
begin
declare @value nvarchar(500);
Set @SQLString = 'Select Grant_Nr From Grant_Master where grant_id=' + @paramterValue
exec sp_executesql
@query = @SQLString,
@value = @value output
return @value
end
실행 :
Select dbo.fn_GetPrePopValue('10002618') from Questions Where QuestionID=114
과:
Select fn_GetPrePopValue('10002618') from Questions Where QuestionID=114
함수가 제대로 호출 또는 기능이 잘못되고 있습니까?
해결법
-
==============================
1.당신은 어느 쪽을 호출 할 수 없습니다, 함수에서 동적 SQL을 사용할 수 없습니다 저장 프로 시저.
당신은 어느 쪽을 호출 할 수 없습니다, 함수에서 동적 SQL을 사용할 수 없습니다 저장 프로 시저.
Create proc GetPrePopValue(@paramterValue nvarchar(100)) as begin declare @value nvarchar(500), @SQLString nvarchar(4000) Set @SQLString = 'Select @value = Grant_Nr From Grant_Master where grant_id = @paramterValue' exec sp_executesql @SQLString, N'@paramterValue nvarchar(100)', @paramterValue, @value = @value output return @value end
-
==============================
2.기능은 사용자가 실수로 끔찍한 성능을 제공 무언가를 만들기없이 쿼리에서 사용할 수 그래서, 그들이 사용 할 수있는 제한됩니다. 동적 쿼리를 사용하여 그 쿼리 계획의 일부가 될 수있는에서 기능을 유지하는 것 또한 각 실행에 대한 쿼리 계획을 일으키지 것처럼, 그런 것들 중 하나입니다.
기능은 사용자가 실수로 끔찍한 성능을 제공 무언가를 만들기없이 쿼리에서 사용할 수 그래서, 그들이 사용 할 수있는 제한됩니다. 동적 쿼리를 사용하여 그 쿼리 계획의 일부가 될 수있는에서 기능을 유지하는 것 또한 각 실행에 대한 쿼리 계획을 일으키지 것처럼, 그런 것들 중 하나입니다.
당신은 값을 반환,이 경우 모두에서 동적 쿼리가 필요하지 않습니다 :
Create Function fn_GetPrePopValue(@paramterValue nvarchar(100)) returns int as begin return (select Grant_Nr From Grant_Master where grant_id = @paramterValue) end
-
==============================
3.난 당신이 함수에서 동적 SQL을 사용할 수 있습니다 생각도 난 당신이 귀하의 경우에 필요가 있다고 생각하지 않습니다. 외모는 가까운이 뭔가를 원하는 좋아 :
난 당신이 함수에서 동적 SQL을 사용할 수 있습니다 생각도 난 당신이 귀하의 경우에 필요가 있다고 생각하지 않습니다. 외모는 가까운이 뭔가를 원하는 좋아 :
Create Function dbo.fn_GetPrePopValue(@paramterValue nvarchar(100)) returns int as begin declare @value int declare @SQLString varchar(MAX) Select @value=Grant_Nr From Grant_Master where grant_id=@paramterValue return @value end
SQL 바이올린 데모
또한, 당신이 필드가 올바른지있어 확인하기 위해 데이터 유형을 확인하십시오. 이드하는 VARCHAR 전달하고 다른 필드 int를 반환 이상하게 보인다. 어느 쪽이든, 이것은 당신이 올바른 방향으로 가야 도움이 될 것입니다.
from https://stackoverflow.com/questions/15180561/getting-an-error-when-executing-a-dynamic-sql-within-a-function-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 주말을 제외한 SQL에서 두 날짜 사이의 계산 차이, (0) | 2020.06.18 |
---|---|
[SQL] 어떻게 2008 SQL 서버에서 XML 열을 읽습니까? (0) | 2020.06.18 |
[SQL] 이 표에서 간단한 SQL 선택 (A 무엇을 가입한다?) (0) | 2020.06.18 |
[SQL] 아포스트로피와 데이터베이스에 SQL 삽입 (0) | 2020.06.18 |
[SQL] WHERE 절에서 참조 별칭 (0) | 2020.06.18 |