2012-02-22 31 views
0
DECLARE @a NVARCHAR(10) , 
    @b NVARCHAR(100) 

SET @a = 'value' 
SET @b = ' PRINT @a ' 

EXEC sp_executesql @b 

我想結果:「值」
,但我得到的錯誤必須聲明標量變量「@a」使用變量

我需要登錄SQL這是所謂的SP

參數我需要這個,因爲裏面SP我創建INFORMATION_SCHEMA.PARAMETERS

我的程序DINAMIC查詢:

ALTER PROCEDURE marianTest 
@a INT, 
@b NVARCHAR(121) 
AS 
BEGIN 
DECLARE @query NVARCHAR(max) 
SET @query = dbo.ufn_admin_Ex(cast(OBJECT_NAME(@@PROCID) AS nvarchar(100))) 
EXECUTE sp_executesql @query 

其中@query是這樣的:

declare @callSP nvarchar(max) = 
'DECLARE @a int = ' + CASE WHEN @a IS NULL THEN 'NULL' ELSE convert(nvarchar(15),@a)  END + CHAR(13) 
+', @b nvarchar(121) = ' + CASE WHEN @b IS NULL THEN 'NULL' ELSE + '''' + @b+ ''''  END + CHAR(13) 

EXECUTE [dbo].[usp_admin_traceError] @callSp 

感謝
瑪麗安

+0

如果你正在使用MySQL請加標籤 「MySQL的」。 – Kamil 2012-02-22 12:53:56

+0

nope,SQL Server 2008 – Zyku 2012-02-22 12:54:51

+0

你引用插入的代碼? – Zyku 2012-02-22 12:58:52

回答

3

我相信這是你在找什麼:

DECLARE @a NVARCHAR(10) , @b NVARCHAR(100) 
SET @a = 'value' 
SET @b = ' PRINT @a ' 
EXEC sp_executesql @b, N'@a nvarchar(10)', @a 

結果:

value 
+0

EXEC sp_executesql @b,N'@ nvarchar(10)',@a 我不能使用@a,因爲我不知道名稱參數 我得到它的代碼: SELECT PARAMETER_NAME FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME =「marianTest」 – Zyku 2012-02-22 13:30:11

+0

你不能執行一個腳本內選擇,所以你需要把PARAMETER_NAME變量或光標內,如果用的是遊標循環遍歷結果。執行腳本時。在這樣做的時候,你可以使用參數 – 2012-02-22 13:39:47

+0

填充@a是的,這是一個想法,我會嘗試 – Zyku 2012-02-22 13:48:24

2

@b不能奇蹟般地看到@a除非你以某種方式向他們介紹。在Exec之前

嘗試:

SET @b = 'PRINT ''' + @a + '''; 

或者你可以改用sp_executesql這樣:

DECLARE @b NVARCHAR(100); 

SET @b = N'PRINT @a'; 

EXEC sp_executesql @b, N'@a NVARCHAR(10)', @a; 
+0

SET @b ='PRINT @a' 我從其他函數(輸入參數過程名稱)得到的動態查詢,有一個100行函數,我想它在更多的程序 ,所以我需要一些神奇的 – Zyku 2012-02-22 13:00:37

+0

你需要向我們展示你實際想做的事情,而不是一些微不足道的表示。 – 2012-02-22 13:02:14

1

如果你想使用參數/變量的動態SQL,你應該使用sp_executesql與參數。請參閱The Curse and Blessings of Dynamic SQL以獲得有關動態SQL的完美介紹。

+0

他在最後一行使用它: 'EXEC sp_executesql @ b' – Bridge 2012-02-22 13:05:40

+0

@Bridge該死的,你是對的。但他以錯誤的方式使用它,所以鏈接仍然是一個有效的答案。 – 2012-02-22 13:06:53

+0

他需要爲它添加參數,因此我的鏈接爲例! :-) 我絕對推薦厄蘭的頁面,但我已經贊成它了。 – Bridge 2012-02-22 13:07:36