程序必須有類型 'ntext/nchar/nvarchar' 的參數 '@statement'。閱讀 MSDN 上發現,原來 sp_executesql 的第一、二個參數都必須是 Unicode
- @stmt:Transact-SQL 陳述式或批次的 Unicode 字串。@stmt 必須是 Unicode 常數或 Unicode 變數。
- @params:包含 @stmt 的所有內嵌參數定義的字串。 此字串必須是 Unicode 常數或 Unicode 變數。
USE [AdventureWorks2014]
GO
CREATE PROCEDURE [dbo].[uspQtyStat]
(
@StartDate date,
@EndDate date,
@ProdNO char(5) = '',
@Status nchar(4) = ''
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TSQL varchar(max) -- 問題所在,不是 Unicode
SET @TSQL =
'SELECT
ProdName ,
ProdNO ,
Status ,
Area ,
COUNT(*) AS Qty
FROM GVPractice
WHERE CreateDate BETWEEN @StartDate AND @EndDate'
IF @ProdNO <> ''
SET @TSQL +=
'
AND ProdNO = @ProdNO'
IF @Status <> ''
SET @TSQL +=
'
AND Status = @Status'
SET @TSQL +=
'
GROUP BY ProdName , ProdNO , Status , Area'
EXEC dbo.sp_executesql
@TSQL,
N'@StartDate date, @EndDate date, @ProdNO char(5), @Status nchar(4)',
@StartDate ,
@EndDate ,
@ProdNO ,
@Status
END
GO
把 @TSQL 宣告為 nvarchar(max) 就可以執行
沒有留言:
張貼留言