Tôi đã tạo ra một quy trình với cấu trúc này nhưng nó không hoạt động cho tham số đầu vào datetime
Loại datetime cho tham số đầu vào trong thủ tục
tôi thực hiện truy vấn này nhưng
declare @a datetime
declare @b datetime
set @a='2012/04/06 12:23:45'
set @b='2012/08/06 21:10:12'
exec LogProcedure 'AccountLog', N'test', @a, @b
nhưng SQL Server đã cho tôi này lỗi
Chuyển đổi không thành công khi chuyển đổi ngày và/hoặc thời gian từ chuỗi ký tự.
nhưng khi tôi thử nghiệm với truy vấn này nó hoạt động
exec LogProcedure 'AccountLog',N'test'
mã thủ tục lưu trữ:
alter PROCEDURE LogProcedure
@TableName VARCHAR(60),
@SearchString NVARCHAR(50),
@DateFirst DateTime = '',
@DateLast DateTime = ''
AS
BEGIN
SET NOCOUNT ON
DECLARE @FinalSQL NVARCHAR(MAX)
SET @FINALSQL = 'SELECT * FROM [' + @TableName + '] where 1=2 '
IF @DateFirst <> '' and @DateLast <> ''
set @FinalSQL = @FinalSQL + ' or convert (Date,DateLog) >= '''[email protected] + ' and convert (Date,DateLog) <='''[email protected]
SELECT
@FinalSQL = @FinalSQL + ' or [' + SYSCOLUMNS.NAME + '] LIKE N''%' + @SearchString + '%'' '
FROM SYSCOLUMNS
WHERE OBJECT_NAME(id) = @TableName
AND TYPE_NAME(SYSCOLUMNS.XTYPE) IN ('VARCHAR','NVARCHAR','CHAR','NCHAR','INT','DECIMAL')
ORDER BY COLID
EXEC(@FinalSQL)
END
Truy vấn này là đúng quá
SELECT *
FROM AccountLog
where 1=2 or convert (Date, DateLog) >= '2012/04/06'
and convert (Date, DateLog) <='2012/08/06'
Tôi không hiểu StackOverflow nữa, tại sao câu hỏi này lại bị bỏ phiếu? đó là một vấn đề khá chung chung với một lời giải thích về những gì anh ta đã thử. –