2012-06-12 3 views
-3

가 여기에 내가 datetime날짜 시간 및 sp_executesql을

OPEN @form_dates
FETCH NEXT FROM @form_dates INTO @cid, @regdate, @compdate

/* PRINT @regdate PRINT @compdate This is correctly having values in datetime. eg: Mar 28 2012 6:03PM PRINT @courseno */

WHILE @@FETCH_STATUS = 0 BEGIN SET @SQL = N'update tblname set cs' + CAST (@cid AS VARCHAR(10)) + '_begin = @rstring , cs' + CAST (@cid AS VARCHAR(10))+ '_end = @cstring where UserID = '+ CAST (@tempID AS VARCHAR(10))

DECLARE @ParmDefinition nvarchar(500) SET @ParmDefinition = N'@rstring datetime, @cstring datetime'

EXECUTE sp_ExecuteSQL @SQL, @ParmDefinition, @rstring = @regdate, @cstring = @compdate I have the values of @regdate and @compdate fetched from a cursor and are of the format Jan 3 2012 2:30PM Mar 28 2012 6:03PM but these values are not reflecting in procedure output where I get the output:

update tblname set cs32_begin = @rstring , cs32_end = @cstring where UserID = 419

감사에 문제가있어 내 T-SQL 코드입니다.^

+0

환영합니다 StackOverflow : 코드, XML 또는 데이터 샘플을 게시하는 경우 ** 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바의 "코드 샘플"버튼 ('{}) '을 클릭하십시오. 형식 및 구문을 강조 표시하십시오! –

+1

'@SQL, @regdate and @ compdate'의 정의를 보여 주시고 값이 어디에서 오는지 커서와 쿼리를 설명하십시오. 이 문제를 완전히 해결하도록 우리에게 요구하고 있습니다. –

+0

그리고 단순화하면 어떻게됩니까? (예 : 내가 준 사례, 단지'SELECT' 만)? 또한 "이 값은 프로 시저 출력에 반영되지 않습니다"라는 의미를 이해하지 못합니다 - 코드 샘플의 마지막 줄에 출력을 정확히 얻는 방법은 무엇입니까? 'PRINT @ SQL'을 사용하고 있습니까? 그렇다면'@ SQL'은'sp_executeSQL'을 사용한 후에 문자열 안의 값을 대체하지 않는다는 것을 명심하십시오. –

답변

1

이 데이터 유형, 날짜 또는 커서와는 아무 상관이있다. 이것은 단지 지저분한 일관되지 않은 변수 명명입니다. 당신은 그들에게 전화 외부 : 당신이 그들에게 전화 내부

@regstring 
@compstring 

:

@rstring 
@cstring 

그래서 일관성, 방법은 하나 또는 다른 것을 시도 :

SET @SQL = N'update tblname set cs' + CAST (@cid AS VARCHAR(10)) 
+ '_begin = @rstring , cs' + CAST (@cid AS VARCHAR(10)) 
+ '_end = @cstring where UserID = '+ CAST (@tempID AS VARCHAR(10)) 

DECLARE @ParamDefinition nvarchar(500) 
SET @ParamDefinition = N'@rstring datetime, @cstring datetime' 

EXECUTE sp_ExecuteSQL @SQL, @ParamDefinition, 
@rstring = @regdate, @cstring = @compdate 
^^-------------------^^ 

편집

이를 나를 위해 잘 작동합니다.

DECLARE @SQL NVARCHAR(MAX); 
SET @SQL = N'SELECT _begin = @rstring , _end = @cstring;'; 

DECLARE @ParmDefinition nvarchar(500) 
SET @ParmDefinition = N'@rstring datetime, @cstring datetime' 

DECLARE @regdate DATETIME = GETDATE(), @compdate DATETIME = DATEADD(DAY, 1, GETDATE()); 

EXECUTE sp_ExecuteSQL @SQL, @ParmDefinition, 
@rstring = @regdate, @cstring = @compdate; 

결과 :

_begin     _end 
----------------------- ----------------------- 
2012-06-13 10:28:47.657 2012-06-14 10:28:47.657 

당신이 여전히 맞춤법이 있거나하지 않는 한 출력이 여전히 문자는 "@rstring"제대로 매개 변수에 의해 대체되지 포함하는 방법을 볼 수 없습니다 다른 변수 이름 불일치. 나는 당신이 우리에게 보여주는 것보다이 쿼리에 더 많은 것이 있다고 생각합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그 모순 된 코드를 실수로 게시했다. 그러나 올바른 매개 변수로도 작동하지 않습니다. –

+0

@RohanWarkad 위대한, 귀하의 질문에 코드 샘플을 수정하고 우리가 지금받을 출력을 보여줄 수 있습니까? –

+0

출력'code'에서 계속이 코드를 얻습니다. 업데이트 tblname set cs30_begin = @rstring, cs30_end = @cstring 여기서 UserID = 275'code' 실제로'code'를 기대할 때 @rstring; @cstring'code'는 각각의 변수 값을 갖습니다. –