Только что понял, что это дубликат ответа @Sean Langem. Я оставляю его, потому что он добавляет больше деталей, которые могут быть полезны для ОП.
Возможно, это не самое элегантное решение (то есть создание GUID в приложении), однако я считаю, что оно должно решить вашу проблему. Обратите внимание, что я проверял это только на SQL Server, а не на SQL Compact.
Используйте ExecuteScalar (), чтобы вернуть свой идентификатор, однако преобразуйте его в строку (varchar) в хранимой процедуре, а затем вернитесь к GUID в своем приложении.
Приведенный ниже пример очень прост для демонстрационных целей, а код находится на VB.Net и не обеспечивает закрытие соединения, обработку исключений и т. Д.
Пример хранимой процедуры, возвращающей значение UNIQUEIDENTIFER как VARCHAR:
CREATE PROCEDURE test
AS
DECLARE @id uniqueidentifier
SET @id = NEWID()
SELECT CONVERT(VARCHAR(38), @id)
GO
Пример кода .Net для вызова базы данных и получения строки, а затем преобразования в guid.
Sub main()
Dim id As Guid
Dim stringId As String
Using con As New SqlConnection("Server=<server>;Database=<DB>;Trusted_Connection=True;")
Using cmd As New SqlCommand("test", con)
cmd.CommandType = Data.CommandType.StoredProcedure
con.Open()
stringId = cmd.ExecuteScalar()
End Using
End Using
id = New Guid(stringId)
End Sub