iT邦幫忙

0

SQL 預存程序中的變數,怎麼處理亂碼

  • 分享至 

  • xImage
DECLARE  @str1 nvarchar(5) ,@str2 nvarchar(5),@str3 nvarchar(5);
SET @str1='堃'
SET @str2=N'堃'
print @str1
print @str2

SET @str3 =@str1
print @str3

請問一下 各位前輩大能
在SQL中如字串儲存會變?,一般都是在前面加N,如上述中,@str2
,但有些情況是傳入預存程序中是個字串推疊如(A,B,C),解開後.運算判斷後再作
儲存的動作,不一定是範例@str3=str1,也有外面傳入再處理情況,只是表達字串處理後
怎麼排除儲存會?的情況,因為在變數時己經沒法加N

謝謝

froce iT邦大師 1 級 ‧ 2022-12-13 11:09:41 檢舉
https://stackoverflow.com/questions/16475326/convert-all-data-in-sql-server-to-unicode
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-15 09:59:39
最佳解答

以下是一個簡單的範例,演示如何在預存程序中使用nvarhcar字串:

CREATE PROCEDURE MyProcedure
    @str1 nvarchar(5),
    @str2 nvarchar(5),
    @str3 nvarchar(5) OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    SET @str3 = @str1

    SELECT @str1 AS 'str1', @str2 AS 'str2', @str3 AS 'str3'
END

以下是如何在預存程序中使用這些參數:

DECLARE @output nvarchar(5)
EXEC MyProcedure '堃', N'堃', @output OUTPUT
SELECT @output AS 'output'
1
allenlwh
iT邦高手 1 級 ‧ 2022-12-13 12:25:57

傳入預存程序時,一樣加個 N 就可以

Create  PROCEDURE [dbo].[_test_1213_1] 
	 @str1 nvarchar(5) ,
	 @str2 nvarchar(5)
AS
BEGIN	
	declare @str3 nvarchar(5)

	print @str1
	print @str2

	SET @str3=@str1
	print '@str3=='+@str3

	SET @str3=@str2
	print '@str3=='+@str3

END
GO
exec _test_1213_1 '堃',N'堃'

?
堃
@str3==?
@str3==堃

我要發表回答

立即登入回答