我發現這幾個類似的問題,但所有的解決方案似乎都與傳遞日期參數以使用sp_executesql這是我做的不算什麼......sp_execute SQL給予不同的結果,以原始查詢
我有一個使用SqlConnection和SqlCommand類連接到SQL數據庫的.NET應用程序。當我運行應用程序並監視使用SQL Server Profiler的數據庫查詢,我可以看到.NET應用程序正在生成以下代碼:
exec sp_executesql N'IF object_id(''tempdb..#ParmsInProc'') IS NOT NULL DROP TABLE #ParmsInProc
SELECT o.name AS ProcName, o.object_id, p.name AS ParamName, p.system_type_id, p.user_type_id
INTO #ParmsInProc
FROM sys.objects o
JOIN sys.parameters p
ON o.object_id = p.object_id
JOIN sys.types t
ON t.system_type_id = p.system_type_id AND t.user_type_id = p.user_type_id
WHERE type_desc = ''SQL_STORED_PROCEDURE'' AND o.name = ''@sp''
SELECT *
FROM #ParmsInProc p
LEFT JOIN (
SELECT *
FROM #ParmsInProc
WHERE system_type_id = 56 AND user_type_id = 56
) ints
ON p.system_type_id = ints.system_type_id AND p.user_type_id = ints.user_type_id',N'@sp nvarchar(14)',@sp=N'sp_myProcedure'
如果我運行SSMS的代碼,我沒有得到任何結果。但是,如果我複製出來的查詢,並與實際值替換參數佔位符,我得到
IF object_id('tempdb..#ParmsInProc') IS NOT NULL DROP TABLE #ParmsInProc
SELECT o.name AS ProcName, o.object_id, p.name AS ParamName, p.system_type_id, p.user_type_id
INTO #ParmsInProc
FROM sys.objects o
JOIN sys.parameters p
ON o.object_id = p.object_id
JOIN sys.types t
ON t.system_type_id = p.system_type_id AND t.user_type_id = p.user_type_id
WHERE type_desc = 'SQL_STORED_PROCEDURE' AND o.name = 'sp_myProcedure'
SELECT *
FROM #ParmsInProc p
LEFT JOIN (
SELECT *
FROM #ParmsInProc
WHERE system_type_id = 56 AND user_type_id = 56
) ints
ON p.system_type_id = ints.system_type_id AND p.user_type_id = ints.user_type_id
,如果我跑,我得到一個結果(這是我所期望的結果)
什麼可能造成這種情況?
'聲明@ sp'和'設置@ sp'初始階段並嘗試。 –
我不認爲這是問題,但參數是NVARCHARS,而你的字符串是VARCHAR –